23丨索引的概览:用还是不用索引,这是一个问题
该思维导图由 AI 生成,仅供参考
索引是万能的吗?
- 深入了解
- 翻译
- 解释
- 总结
本文通过两个实验展示了在数据行数较少的情况下,创建索引并未提升查询效率;而在特殊情况下,如性别字段取值分布极不均匀时,创建索引却能显著提升查询效率。文章还介绍了索引的种类,包括普通索引、唯一索引、主键索引和全文索引,以及聚集索引和非聚集索引的区别。总的来说,索引并非万能,需要根据具体情况进行合理的创建和使用,以达到最佳的查询效率。文章还探讨了联合索引的最左原则,指出了在使用联合索引时需要注意的地方。通过对实验结果的对比和总结,读者可以了解到索引的优劣势以及在不同情况下的使用效果,为其在实际工作中合理使用索引提供了指导。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(44)
- 最新
- 精选
- DZ联合索引的最左原则就是说,索引是一种顺序结构,我们按照什么顺序创建索引,就只能按照这个顺序使用索引,这容易理解。 假设我们有X、Y、Z三个字段,创建联合索引(X, Y, Z),可以理解成,数据库按照不同的权重排列了XYZ,形成了一个新值。 如果把X、Y、Z分别类别成“百分位”、“十分位”和“个位”,则新值XYZ依次排列在索引上。 查询“X=9 AND Y=8 AND Z=7”的过程,就是在一个由小到大排列的数值序列中寻找“987”,可以很快找到。 查询“Y=8 AND Z=7”,就用不上索引了,因为可能存在187、287、387、487...,这样就必须扫描所有数值。 查询“Z=7 AND Y=8 AND X=9”,看上去所有字段都用上了,也可以按照百分位、十分位和个数的逻辑去利用索引,但SQL不会自动识别出联合索引顺序与联合查询的顺序,它会严格地按照字面顺序去套用索引,只要不匹配,就不用。 综上,使用联合索引的时候,字段顺序不能乱,查询字段可以少,但只能从右侧开始减少,不能从左侧。 这就像按顺序查数值,先找高位再找低位(索引扫描),如果先找十分位或者先找个位,那就只能每个数值都看一下(全扫描)。
作者回复: 这个比喻解释的很形象,另外在这个基础上还需要说明下: 1)SQL条件语句中的字段顺序不重要,因为在逻辑查询优化阶段会自动进行 查询重写。 2)如果我们遇到了范围条件查询,比如<、<=、>、>=、between等。那么范围列后的列就无法使用到索引
2019-08-031064 - 峻铭使用聚集索引的时候,数据的查询效率高,但如果对数据进行插入,删除,更新等操作,效率会比非聚集索引低。对这句话我不明白,为什么插入、删除、更新等操作,效率会比非聚集索引低,这三个操作内部都是先进行了查询的,聚集索引属于存储结构的物理索引,查询效率高,自然插入、删除、更新的效率也高啊。实在不解
作者回复: 聚集索引是面向读取的设计,因为我们的数据会按照聚集索引的大小顺序写入到磁盘,因此聚集索引会存在存储顺序的问题。而我们更新,插入的内容往往都是随机的,这时如果我们还是用聚集索引,所有的记录就需要重新进行排序并重新写入到磁盘中,所以效率相比于非聚集索引可能会降低。 而非聚集索引只是存储索引,我们只需要更新这个索引即可,不需要对所有的记录重新排序。
2019-09-10723 - Fargo老师没讲如何创建索引,可以参考https://www.runoob.com/mysql/mysql-index.html
作者回复: 多谢分享
2019-08-09220 - Elliot一旦创建了索引,你需要先访问 50 万次索引,然后再访问 5... 这句话还是不太理解,可以再详细解释一下吗?非常感谢
作者回复: 因为二级索引(辅助索引)并不存储我们想要SELECT的具体数据,因此是通过二级索引想找到主键,然后再通过主键找到具体的数据。这种方式也称之为回表,是因为索引没有对SELECT查询的字段进行完全覆盖。
2019-09-1349 - 许童童使用联合索引时,如果可以使用索引覆盖,那就不用回表,查询性能更好了。
作者回复: 是的
2019-08-0247 - 梁“当数据重复度大,比如高于 10% 的时候,也不需要对这个字段使用索引。”,文中还举例到了“性别”字段,这类数据重复度大,不正好适合位图索引吗?
作者回复: 对 位图索引适合
2019-11-194 - 未来的胡先森计算机实际是对现实生活的一个抽象,正如索引来自于生活中的字典。
作者回复: 索引比喻的不错,计算机算是运用数学工具,帮我们自动化解决问题
2019-08-144 - Z.CC100万条数据是怎么插入的。。。
作者回复: 我写的存储过程插入的…
2019-09-1023 - 爱思考的仙人球在性别这类重复度高的字段上,oracle可以创建位图索引
作者回复: 对 bitmap是不错的方式
2019-10-202 - Monday百度网盘下载真慢,另外请老师提供一个存储过程插入用户表。
作者回复: 大数据量插入的存储过程,我在专栏里应该有写
2019-08-1122