MYBLOG

欢迎来到小马哥的个人博客~

[原创]SQLSERVER之索引总结

2020-03-08学海无涯

一、什么是索引?
    微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引

(nonclustered index,也称非聚类索引、非簇集索引)。那么这两种索引有何区别呢?我们接下来举个例子。
     我们小时候用的新华字典本身就是一个聚集索引。因为正本字典的排序就是以“a”开头并以“z”结尾的26个英

文字母的顺序。如果我们认识我们要查找的字的话,很容易就可以根据字的拼音首字母就可以查到这个字。那什么是非

聚集索引呢?同样还是新华字典,如果我们要查的这个字不认识,那我们就只能根据“偏旁部首”去查,然后根据根据

这个字后的页码,直接翻到某页找个这个字。
    通过以上的例子,我们很容易理解什么是“聚集索引”和“非聚集索引”

二、如何使用聚集索引和非聚集索引

动作 聚集索引 非聚集索引
列经常被分组排序
返回某范围内的数据
不应
一个或极少不同值

不应
小数目的不同值
不应
大数目的不同值
不应

频繁更新的列
不应
外键列
主键列
频繁修改索引列
不应

三、总结

1、聚集索引建立要慎重,一般默认主键就是聚集索引,但是我们要根据实际的业务去设置聚集索引,否则就是一种巨大的浪费。

2、建立索引未必就能提高查询速度。

3、聚集索引建立规则:既不能绝大多数都相同,又不能只有极少数相同

4、复合索引起始列必须是选取要慎重,一样要选取使用最频繁的列,查询如果仅以非起始列作为查询条件,则索引无效果。

5、索引覆盖是指建索引的字段正好是覆盖查询条件中所涉及的字段

四、经验

1、当出现LIKE ‘IT小马%’才会运用索引

2、NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE、OR等非操作符、函数都不满足索引

3、函数charindex()和前面加通配符%的LIKE执行效率一样  

4、union并不绝对比or的执行效率高  

5、字段提取要按照“需多少、提多少”的原则,避免“select *”  

6、TOP很高效