索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。本节将介绍一些索引的设计原则。

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索引的设计原则相关推荐

  1. 20个MySQL高性能架构设计原则(收藏版)

    墨墨导读:MySQL如何实现高性能?以下内容是结合其他技术同仁的总结和自我实践整理的20个开源数据库设计原则,分享至此,希望对大家有帮助. 开源数据库架构设计原则 01 技术选型 选择成熟的平台和技术 ...

  2. mysql索引怎么设计,MySQL如何设计索引

    MySQL改善性能最好的方式,就是通过数据库中合理地使用索引,换句话说,索引是提高 MySQL 数据库查询性能的主要手段.在下面的章节中,介绍了索引类型.强制索引.全文索引. MySQL 索引可以分为 ...

  3. MySQL 索引最左匹配原则

    csdn原文:http://blog.csdn.net/zhu19774279/article/details/46473981 本文的原文地址在此:https://www.percona.com/b ...

  4. mysql索引怎么设计_mysql索引设计

    mysql索引设计 1.B树与B+树的区别? B-Tree:一个节点可以拥有大于2个子节点的平衡多叉树,所有关键字在整颗树中出现,包括在非叶子节点也能命中, 叶子节点之间没有链表 B+Tree:每个叶 ...

  5. 【转】Mysql索引最左匹配原则理解

    作者:沈杰 链接:https://www.zhihu.com/question/36996520/answer/93256153 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  6. php mysql索引最左原则_MySQL 索引使用策略及优化

    MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization). 本章讨论的高性能索引策略主要属于结构优化范畴.本章的内容完全基于上文的理 ...

  7. MySQL索引的设计、使用与优化

    一.使用索引的优缺点 索引是数据库用来提高性能的最常用工具,所有的MySQL列都可以被索引,对相关的列进行索引是提高select性能的最佳途径.使用索引的优点和缺点如下: 优点: 快速访问数据表中的特 ...

  8. 高性能Mysql数据库表设计原则

    为什么80%的码农都做不了架构师?>>>    1.更小通常更好 选择表示数据的最小类型(正确存储你的内容):比如说,能够使用char 数据类型存储,就不必选择varchar,能够使 ...

  9. mysql索引最左匹配原则的理解

    我记得网易面试的时候问到了.阿里也面到了 创建表 create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engin ...

最新文章

  1. 从windows上传文件到linux,中文名乱码解决方法
  2. jQuery 事件绑定
  3. vb6源码 ymodem_任意字符的ASCII码转换工具,基于VB6的源代码VB字符串处理源码下载...
  4. Why docker command need sudo? | 为什么运行docker命令需要sudo?
  5. 独立物理机和虚拟机比较有什么优势?
  6. Use Amazon VM to try Openstack (1) (with DevStack)
  7. php快速删除,学习猿地-php如何快速删除文章
  8. php和gps终端设备通讯,运输车辆GPS定位+语音对讲通讯方案
  9. Tomcat详解(一)——tomcat基础知识
  10. Linux chapter 7
  11. CentOS7.5 怎么修改默认SSH端口号
  12. 实时消息传输协议(RTMP)详解
  13. aspnetcore vue 下载zip文件,压缩包打不开的问题记录
  14. python eml解析_使用 python eml-parser 对 eml文件进行格式化
  15. python制作工资表_Python实用案例:一秒自动生成工资条。
  16. Skyline TerraExplorer 自定义飞行转弯速度不管用解决办法
  17. VPS主机在未来会取代虚拟主机空间吗?
  18. vba:消息框基础,msgbox
  19. MYSQL主流版本简述
  20. SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

热门文章

  1. Py之matplotlib:matplotlib绘图自定义函数总结
  2. 强大的DataGrid组件[1]【转】
  3. MSSql2005: Cube 和 RollUp 的区别
  4. Oracle删库跑路
  5. 用 Flask 来写个轻博客
  6. 洛谷 P1703 那个什么密码2
  7. 使用coding.net上传项目
  8. Android性能优化之一:ViewStub
  9. DirectX10一变换(三)
  10. Gentoo - X11 forwarding request failed on channel 0