索引相关知识
--使用索引的目的
--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