3.1索引创建的原则 ?

简介: 创建索引需遵循六大原则:针对大数据量、高频查询表;在查询、排序、分组字段建索引;优先高区分度列,可建唯一索引;varchar字段建议用前缀索引;多用联合索引且高区分度字段前置;避免过多索引影响维护效率。

必答内容:
好的,我们知道索引确实可以提高查询的效率,但前提是需要针对于数据库表创建合适的索引。创建索引的时候主要考虑一下几点原则:
1).针对于数据量较大,且查询比较繁琐的表创建索引。(单表超过10w记录)
2).针对于经常作为查询条件(where)、排序(orderby)、分组(group by)操作的字段建立素引。
3).尽星选择为区分度高的列建立索引,如果该字段是唯一的,建立唯一素引,效率更高。(区分度越高,效率越高)。
4).在varchar类型的字段上,建议指定索引长度(建立前缀素引),没必要对全字段建立索引,根据实际文本区分度决定素引长度就可以。
5).尽量建立联合素引,而且在联合素引中将区分度高的字段放在前面,减少单列素引。(查询时,联合素引很多时候可以素引覆盖,避免回表,提高效率)
6).在满足业务需求的前提下,建立适当的素引,索引不宜过多。(素引过多,会增加维护素引的成本,影响增制改的效率)
。可能会继续发问的问题:
1).索引的创建只是第一步,要想提高查询效率,还得正确的使用素引,避免素引失效,你知道素引失效的场景吗?【参照 3.2]
3.2 简单聊聊索引失效的场景 ?
·必答内容:
好的,素引失效这个问题,确实是在项目开发中非常常见的一类问题。那我就结合我之前的项目经验来聊一下,之前遇到的一些索引失效的场景:
第一类呢,就是在联合索引使用的时候,违反最左前缀法则,比如查询的条件并不是从索引最左边的列开始的。
第二类呢,就是范围查询(非等值查询)右侧的列,不能使用素引。
第二类呢,就是在索引列上进行运算或函数操作,索引将失效。非常典型的,像我们基于substring这样的函数载取字段值。
以及如果在条件匹配时,需要进行隐式类型转换的时候。比如:where gender=1,而gender是char类型这种字符串不加引号,虽然查也能查出来,但也会造成索引失效。
还有像常见的,以 %开头的like模糊匹配,索引也会失效。
当然这样的场景很多啊,上面这几个只是比较常见的索引失效的场景,所以在项目开发中,编写SQL时,就要避免这些情况的发生。
进阶内容:零
而对于索引是否生效,到底走哪个素引,以及具体SQL语句的执行性能到底怎么样。 这个我们可以借助于explain 来查看sql语句的执行计划,具体问题具体分析。
我们可以通过explain执行计划中的 key 来确定此次查询是否使用了索引,以及通过 type 来判定SQL的执行性能定要规避 type 为all全表扫描的情况,还有像 extra 的信息也需要关注一下。

相关文章
|
存储 SQL 关系型数据库
MySQL高级篇——索引失效的11种情况
索引优化思路、要尽量满足全值匹配、最佳左前缀法则、主键插入顺序尽量自增、计算、函数导致索引失效、类型转换(手动或自动)导致索引失效、范围条件右边的列索引失效、不等于符号导致索引失效、is not null、not like无法使用索引、左模糊查询导致索引失效、“OR”前后存在非索引列,导致索引失效、不同字符集导致索引失败,建议utf8mb4
MySQL高级篇——索引失效的11种情况
|
XML 存储 JSON
Spring MVC详解(学习总结)
Spring MVC详解(学习总结)
Spring MVC详解(学习总结)
|
设计模式 网络协议 Java
03.开闭原则详细介绍
本文详细介绍了面向对象设计中的开闭原则(OCP),即软件实体应对扩展开放、对修改关闭。文章通过问题思考、背景分析、实现方式及案例教学,深入探讨了如何在实际开发中应用这一原则,以提高代码的可维护性和扩展性。文中还结合图形绘制和银行业务两个具体案例,展示了如何通过抽象类、接口、策略模式等技术手段实现开闭原则。最后总结了开闭原则的优缺点,并强调了其在设计模式中的重要地位。
545 14
|
存储 关系型数据库 MySQL
如何创建索引
如何创建索引
586 0
|
SQL 缓存 Java
sql优化方法
sql优化方法
477 0
|
SQL 关系型数据库 MySQL
MySQL优化:12种提升SQL执行效率的有效方法
在数据库管理和优化的世界里,MySQL作为一个流行的关系型数据库管理系统,其性能优化是任何数据密集型应用成功的关键。优化MySQL数据库不仅可以显著提高SQL查询的效率,还能确保数据的稳定性和可靠性。
1022 0
|
SQL 关系型数据库 MySQL
聊聊索引失效的10种场景,太坑了
聊聊索引失效的10种场景,太坑了
聊聊索引失效的10种场景,太坑了
|
算法
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
1438 0
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
|
机器学习/深度学习 存储 人工智能
第六届数字中国建设峰会,我们在这里!
第六届数字中国建设峰会,我们在这里!
702 0