聚集索引比非聚集索引更快吗? 大概数周之前,因为公

      大概数周之前,因为公司招人,想在网上找点面试题“借用借用”,于是无意中找到这样一道数据库题:

索引有那两种形式?分别有什么优缺点?

       文章作者给出的答案是:

聚集索引:表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较大。
   非聚集索引:不影响表中数据的存储顺序,检索效率聚集索引低,但对数据更新影响较小。

       非聚集索引真的比聚集索引慢吗?就本人对数据库的理解,并不是这样的。

       以SQL SERVER为例,数据记录是分布在以8KB为单位的数据页上的。聚集索引就是数据本身,而非聚集索引保存的是索引对应的聚集索引键值。

       因此绝大多数情况,一单位聚集索引的大小都大于一单位非聚集索引的大小,换句话说,一个数据页上能够容纳非聚集索引的条数是多余聚集索引的。

       而SQL SERVER是以页为单位来扫描数据的,因此扫描相同页数量的数据页,能够覆盖的非聚集索引数量会更多,如果合理的利用SQL SERVER 2005的包含列的话,非聚集索引的查询效率是高于聚集索引的。

 

由于数据库数据越来越多,索引对查询影响很大,故测试速度对比

测试环境,630W数据,普通个人电脑

聚集索引1个

匹配的非聚集索引2个

结论:

1.主动创建聚集索引和创建主键自动生成的聚集索引是一样的,查询效率相同

2.创建主键(聚集索引)按照主键条件查询和创建匹配的非聚集索引查询效率差别不大,基本一致 

3.聚集索引下循环插入1000条数据633毫秒,非聚集索引下内存变高,越来越卡。执行到快5分钟的时候我停止了

4.由此得出,确实索引越多插入越慢,而且变化程度很大

 

 

PS:

1.有重复数据的列不能作为主键,会抛异常

2.SELECT  COUNT(1)和SELECT  COUNT(*) 查询效率一样

posted @ 2021-05-24 09:40  路要一步一步走  阅读(581)  评论(0编辑  收藏  举报