---使用索引优化数据库查询效率

1.不宜创建索引的情形

(1)经常插入,修改和删除的表

(2)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间


2.适合创建索引的情形

(1)为where子句中出现的列创建索引

(2)创建组合索引

(3)为group by 子句中出现的列创建索引


3.聚集索引的设计原则

(1)该列的数值是唯一的或者很少有重复的记录

(2)经常使用between ...and..按顺序查询的列

(3)定义identity的唯一列.

(4)经常用于对数据进行排序的列.


---无法使用索引的select语句

1.对索引列使用了函数,如:

select * from tb where max(id)=100


2.对索引列使用了'%xx',如:

select * from tb where id like '%1'

需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如

select * from tb where id like '1%'就可以使用索引


3.在where子句中对列进行类型转换(其实也是使用到了函数)


4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;

select * from tb where id='1' and col1='aa'

select id,sum(col1) from tb group by id

select * from tb where id='2' and col2='bb'

则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序


5.在where 子句中使用in关键字的某些句子

当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引

如:

select

*

from

ta

where

id

in

(select id from tb where ....)


--这样可以用到索引

select * from tb where id in('1','2')