索引相关知识

--使用索引的目的

--1、提高查询效率、避免全表扫描

--2、设置主键后(创建聚簇索引后),逻辑顺序和物理顺序一致,会自动按照局促索引排序

--3、每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放

--4、聚簇索引可放在一个或多个列上

--

SELECT * FROM EMPLOYEE e;

USE Test

sp_helpIndex EMPLOYEE  --查询表上拥有的索引

--创建主键(聚簇索引不一定是主键,可先创建聚簇索引,然后创建主键)

ALTER   TABLE  EMPLOYEE   

ADD CONSTRAINT [PK_test]   PRIMARY   KEY   (fname)   

 

--创建索引

--CREATE [UNIQUE] [CLUSTERED│NONCLUSTERED]INDEX index_name ON {table│view} (column [ASC│DESC] [,…n])

CREATE CLUSTERED  INDEX i_fname ON EMPLOYEE(empid)  --创建聚簇索引

CREATE INDEX i_fname ON EMPLOYEE(empid)  --创建非聚簇索引

Create index i55 on EMPLOYEE(fname,lname)     --创建复合索引

DROP INDEX EMPLOYEE.i_fname  --删除索引表名/视图名.索引名称(这里不是字段名称,是索引名称)

           

--删除主键的方法  

Declare @Pk varChar(100); 

Select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('EMPLOYEE') and xtype='PK';

if @Pk is not null

begin

     exec('Alter table EMPLOYEE Drop '+ @Pk)  --删除原主键

 end

--删除主键的方法           

--

SQL语句在什么情况下使用全表扫描

-

-

SQL语句在什么情况下使用全表扫描

1对返回的行无任何限定条件即没有where 字句 

2对数据表与任何索引主列相对应的行限定条件例如City-State-Zip列创建了三列复合索引那么仅对State有列限定条件不能使用这个索引因为State不是索引的主列

3对索引的主列有限定条件但是条件在表达式里使用例如City上有索引但是若使用表达式

where upper(city)=''TokYo''  

City ''X'' like ''TOKYO%'',

那么不会使用索引

4对索引的主列有限定条件但是条件或者是Null或者是不相等例如City上有索引但是若使用表达式: 

where City is null,where City is 

not null,Where city!=''TOKYO''.

5: 对索引的主列有限定条件但是条件使用like操作以及值以%开始或者值是一个赋值变量例如

where City like ''%YOK%'' 

where City like: City_bind_Variable xl_rao

posted @ 2011-04-20 10:48    阅读(347)  评论(0编辑  收藏  举报