中英双语网站建设合同,东莞市路桥所,久久建筑网碗扣式钢管脚手架安全技术规范,注册公司网上申请索引是帮助数据库高效获取数据的数据结构。索引是加速查询的常用技术手段。在设计索引时#xff0c;要遵循索引设计规范#xff0c;避免不必要的踩坑。
【推荐】索引存储结构推荐BTREE
InnoDB和MyISAM存储引擎表#xff0c;索引类型必须为BTRER#xff0c;MEMORY表可以根…索引是帮助数据库高效获取数据的数据结构。索引是加速查询的常用技术手段。在设计索引时要遵循索引设计规范避免不必要的踩坑。
【推荐】索引存储结构推荐BTREE
InnoDB和MyISAM存储引擎表索引类型必须为BTRERMEMORY表可以根据需要选择HASH或者BTREE类型索引。
【建议】单个表上的索引个数不能超过7个
索引在加速查询的同时也会带来写入速度降低的问题(写入数据的同时要更新索引)。应限制单表上索引个数。
【建议】利用覆盖索引来进行查询操作
覆盖查询即是查询只需要通过索引即可拿到所需数据而不需要再次回表查询所以效率相对很高。所谓的覆盖索引就是索引上存储的某一条记录索引列的值如果一个查询只需要访问索引中的数据而无需访问实际的表时就可以实现覆盖索引的效果。
【强制】使用联合索引时要遵循最左前缀匹配原则
所谓的联合索引就是基于多个列创建索引也称多码索引、组合索引等。举例来说一个表有A、B、C、D等列如果声明(A,B,C)为一个索引那么这个索引就是一个联合索引。联合索引遵循最左前缀匹配原则。所谓最左前缀匹配的原则就是最左优先在检索数据时从联合索引的最左边开始匹配联合索引的第一个字段必须出现在查询组句中这个索引才会被用到对(A,B,C)的索引数据库会同时际建立了(A)、(A,B)、(A,B,C)三个索引。 基于以上介绍在使用联合索引时为遵循最左匹配原则要将使用最频繁的列放在最左这样就能使用到索引。如上述联合索引A应该是访问频率频率最高的列。 此外既然联合索引会默认创建一些索引所以没有必要重复创建索引。比如先定义(A,B,C)联合索引则没有必要再定义(A)索引和(A,B)索引。 最后在使用联合索引的时候要注意联合索引无法覆盖的场景如对于(A,B,C)联合索引如果需要再B上使用索引联合索引是无法覆盖的需要单独基于B创建索引。
【推荐】多表关联查询时保证被关联的字段有索引
多表关联查询会引入性能问题如果表的规模很大。对于大数据量场景需要保证被关联的字段有索引。
【建议】频繁更新的列不建议创建索引
索引不是没有代价的索引在加速数据的检索速度的同时因为需要维护索引对应的实现结构当对表中的数据进行增加、删除和修改的时候会降低增/改/删的执行效率。所以对于需要频繁更新的字段不建议建立索引。如果需要加速这部分数据的查询性能首先考虑业务场景是否合理其次考虑当前表结构设计是否合理看看能否将业务需要的字段变成不频繁更新的列。
【强制】使用索引时要考虑索引生效、失效的场景
索引在sql中的where子句、order by子句、join子句、select子句中会生效。但是也要注意索引不生效的情况。索引失效的场景可以参考笔者之前的WIKI。常见的索引失效场景有 (1) 查询条件中有or。此时必须保证所有or相关的字段都有索引才能生效。所以要谨慎使用or语句。 (2) like语句以%开头。模糊查询时使用%且将其放在开头会导致索引失效。 (3) 如果存在类型转换(如存储是字符串查询的时候未用引号则会进行类型转换)索引会失效。 (4) 索引列参与计算会导致索引失效(如执行算数运算或使用函数)。 (5) 违背最左匹配原则。 (6) 如果Mysql 评估全表扫描要比使用索引要快则索引失效(数据量很少使用索引不会提升查找性能)。
【建议】如果不明确查询是否使用到索引可使用执行计划判断
执行计划除了用来分析查询性能还可以判断查询是否使用到了索引。执行计划的使用可以参考这篇WIKI。
参考
https://zhuanlan.zhihu.com/p/391673897 第32期索引设计索引设计详细规范 https://zhuanlan.zhihu.com/p/354375388 汇总篇 | MySQL数据库设计开发规范 https://zhuanlan.zhihu.com/p/339441666 超全的数据库建表、SQL、索引规范 https://blog.csdn.net/USTC_Zn/article/details/94356505 数据库使用规范(索引规范SQL规范表设计规范等) https://blog.51cto.com/u_2820398/6034597 索引与查询性能优化