13、MySQL索引的设计原则
索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。本节将介绍一些索引的设计原则。
1. 选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。
2. 为经常需要排序、分组和联合操作的字段建立索引
经常需要 ORDER BY、GROUP BY、DISTINCT 和 UNION 等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
3. 为常作为查询条件的字段建立索引
如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
注意:常查询条件的字段不一定是所要选择的列,换句话说,最适合索引的列是出现在 WHERE 子句中的列,或连接子句中指定的列,而不是出现在 SELECT 关键字后的选择列表中的列。
4. 限制索引的数目
索引的数目不是“越多越好”。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。在修改表的内容时,索引必须进行更新,有时还可能需要重构。因此,索引越多,更新表的时间就越长。
如果有一个索引很少利用或从不使用,那么会不必要地减缓表的修改速度。此外,MySQL 在生成一个执行计划时,要考虑各个索引,这也要花费时间。创建多余的索引给查询优化带来了更多的工作。索引太多,也可能会使 MySQL 选择不到所要使用的最佳索引。
5. 尽量使用数据量少的索引
如果索引的值很长,那么查询的速度会受到影响。例如,对一个 CHAR(100) 类型的字段进行全文检索需要的时间肯定要比对 CHAR(10) 类型的字段需要的时间要多。
6. 数据量小的表最好不要使用索引
由于数据较小,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
7. 尽量使用前缀来索引
如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT 和 BLOG 类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
8. 删除不再使用或者很少使用的索引
表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。应该定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
总结
选择索引的最终目的是为了使查询的速度变快,上面给出的原则是最基本的准则,但不能只拘泥于上面的准则。应该在学习和工作中不断的实践,根据应用的实际情况进行分析和判断,选择最合适的索引方式。
13、MySQL索引的设计原则相关推荐
- 20个MySQL高性能架构设计原则(收藏版)
墨墨导读:MySQL如何实现高性能?以下内容是结合其他技术同仁的总结和自我实践整理的20个开源数据库设计原则,分享至此,希望对大家有帮助. 开源数据库架构设计原则 01 技术选型 选择成熟的平台和技术 ...
- mysql索引怎么设计,MySQL如何设计索引
MySQL改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. MySQL 索引可以分为 ...
- MySQL 索引最左匹配原则
csdn原文:http://blog.csdn.net/zhu19774279/article/details/46473981 本文的原文地址在此:https://www.percona.com/b ...
- mysql索引怎么设计_mysql索引设计
mysql索引设计 1.B树与B+树的区别? B-Tree:一个节点可以拥有大于2个子节点的平衡多叉树,所有关键字在整颗树中出现,包括在非叶子节点也能命中, 叶子节点之间没有链表 B+Tree:每个叶 ...
- 【转】Mysql索引最左匹配原则理解
作者:沈杰 链接:https://www.zhihu.com/question/36996520/answer/93256153 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- php mysql索引最左原则_MySQL 索引使用策略及优化
MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization). 本章讨论的高性能索引策略主要属于结构优化范畴.本章的内容完全基于上文的理 ...
- MySQL索引的设计、使用与优化
一.使用索引的优缺点 索引是数据库用来提高性能的最常用工具,所有的MySQL列都可以被索引,对相关的列进行索引是提高select性能的最佳途径.使用索引的优点和缺点如下: 优点: 快速访问数据表中的特 ...
- 高性能Mysql数据库表设计原则
为什么80%的码农都做不了架构师?>>> 1.更小通常更好 选择表示数据的最小类型(正确存储你的内容):比如说,能够使用char 数据类型存储,就不必选择varchar,能够使 ...
- mysql索引最左匹配原则的理解
我记得网易面试的时候问到了.阿里也面到了 创建表 create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engin ...
最新文章
- 从windows上传文件到linux,中文名乱码解决方法
- jQuery 事件绑定
- vb6源码 ymodem_任意字符的ASCII码转换工具,基于VB6的源代码VB字符串处理源码下载...
- Why docker command need sudo? | 为什么运行docker命令需要sudo?
- 独立物理机和虚拟机比较有什么优势?
- Use Amazon VM to try Openstack (1) (with DevStack)
- php快速删除,学习猿地-php如何快速删除文章
- php和gps终端设备通讯,运输车辆GPS定位+语音对讲通讯方案
- Tomcat详解(一)——tomcat基础知识
- Linux chapter 7
- CentOS7.5 怎么修改默认SSH端口号
- 实时消息传输协议(RTMP)详解
- aspnetcore vue 下载zip文件,压缩包打不开的问题记录
- python eml解析_使用 python eml-parser 对 eml文件进行格式化
- python制作工资表_Python实用案例:一秒自动生成工资条。
- Skyline TerraExplorer 自定义飞行转弯速度不管用解决办法
- VPS主机在未来会取代虚拟主机空间吗?
- vba:消息框基础,msgbox
- MYSQL主流版本简述
- SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...