1. 搜索的索引列,不一定是所要选择的列。

换句话说,最适合索引的列是出现在 WHERE 子句中的列,或连接子句中指定的列,而不是出现在 SELECT 关键字后的选择列表中的列 。

2. 使用惟一索引。

考虑某列中值的分布。对于惟一值的列,索引的效果最好,而具有多个重复值的列,其索引效果最差。例如,存放年龄的列具有不同值,很容易区分各行。而用来记录性别的列,只含有 “ M ” 和 “ F ” ,则对此列进行索引没有多大用处(不管搜索哪个值,都会得出大约一半的行)

3. 使用短索引。

如果对串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做 。

例如,如果有一个 CHAR(200) 列,如果在前 10 个或 20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。对前 10 个或 20 个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘 I/O 较少,较短的值比较起来更快 。

更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此, MySQL也可以在内存中容纳更多的值。这增加 了找到行而不用读取索引中较多块的可能性。

(当然,应该利用一些常识。如仅用列值的第一个字符进行索引是不可能有多大好处的 ,因为这个索引中不会有许多不 同的值。)

4. 利用最左前缀。

在创建 一个 n 列的索引时,实际是创建了 MySQL 可利用的 n 个索引。多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列 集

称为最左前缀。(这与索引一个列的前缀不同,索引一个列的前缀是利用该的前 n 个 字符作为索引值。)

5. 不要过度索引。

不要以为 索引 “ 越多越好 ” ,什么东西都用索引是错的。每个额外的 索引都要占用额外的磁盘空间,并降低写操作的性能,这一点我们前面已经介绍 过。在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的 时间越长。如果有一个索引很少利用或从不使用,那么会不必要地减缓表 的修改速度。此外, MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余的 索引给查询优化带来了更多的工作。索引太多,也可能会使 MySQL 选择不到所要使用的最好索引。只保持所需的索引有利于查询优化。如果想给已索引的表增加索引,应该考虑所要增加的索引是否是现有多列索引的最左 索引。如果是,则就不要费力去增加这个索引了,因为已经有了。

6. 考虑在列上进行 的比较类型。索引可用于 “ < ” 、 “ < = ” 、 “ = ” 、 “ > = ” 、 “ >” 和 BETWEEN 运算。

在模式具有一个直接量前缀时,索引也用于 LIKE 运算。如果只将某个列用于其他类型的运算时(如 STRCMP( ) ),对其进行索引没有价值。

MySQL设计索引的原则相关推荐

  1. MySQL之索引创建原则

    MySQL之索引创建原则 一.适合创建索引 1.字段的数值有唯一性限制 根据Alibaba规范,指明在业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引. 例如,学生表中的学号时具有唯一性的 ...

  2. 我面试几乎必问:你设计索引的原则是什么?怎么避免索引失效?

    之前我们已经详细介绍了关于索引的原理和索引的查询的原则,所谓工欲善其事必先利其器,各位在学习阶段一定要要循序渐进的来学习这块知识,千万不要眼高手低,一定要不急不躁,争取一个萝卜一个坑,学完后能一次性拿 ...

  3. mysql 联合索引匹配原则

    读mysql文档有感 看了mysql关于索引的文档,网上有一些错误的博客文档,这里我自己记一下. 几个重要的概念 1.对于mysql来说,一条sql中,一个表无论其蕴含的索引有多少,但是有且只用一条. ...

  4. mysql索引选择_MySQL 索引选择原则

    目的 MySQL查询优化器是基于代价(cost-based)的查询方式.因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据多种索引,计算查询需要的代价,从而选择最优的索引方式生成查询计划. ...

  5. MySQL中索引与视图的用法与区别详解

    索引与视图是我们在日常使用mysql必不可少的一部分,最近在学习中看到一本书中关于这方法写的不错,所以这篇文章主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关资料,需要的朋友可以参考借鉴, ...

  6. MySQL 高级 - 索引 - 索引设计原则

    索引设计原则 ​ 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引. 对查询频次较高,且数据量比较大的表建立索引. 索引字段的选择,最佳 ...

  7. php 如何设计索引_Mysql学习浅谈mysql的索引设计原则以及常见索引的区别

    <Mysql学习浅谈mysql的索引设计原则以及常见索引的区别>要点: 本文介绍了Mysql学习浅谈mysql的索引设计原则以及常见索引的区别,希望对您有用.如果有疑问,可以联系我们. 索 ...

  8. 深入理解MySQL索引设计和优化原则

    索引类型 探讨索引设计和优化原则之前,先给大家熟悉一下索引类型: 主键索引PRIMARY KEY:它是一种特殊的唯一索引,不允许有空值.一般是在建表的时候同时创建主键索引. 唯一索引UNIQUE:唯一 ...

  9. 面试mysql中怎么创建索引_阿里面试:MySQL如何设计索引更高效?

    有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...

最新文章

  1. javascript基础:函数参数与闭包问题
  2. android 从文件制定位置读取数据
  3. MySQL+HandlerSocket=MySQL的功能+NoSQL的性能
  4. [vue] 说说你觉得认为的vue开发规范有哪些?
  5. 【Unity新闻】Unity新工具Metric Validation帮你自动化测试游戏平衡性
  6. 案例学习BlazeDS+Spring之十一:Simple Data Push
  7. 谷歌再推AI开源平台AI·ON,你有机会参与Bengio的项目了
  8. Java基础篇:if控制语句
  9. 不同线程产生的map,会崩溃?
  10. 【asp】有效防止网站留言板出现垃圾留言/评论实现思路_ASP教程
  11. trados 有道api_小白教程(四) | 你和专业翻译还差一个Trados
  12. 中国计算机学会高级会员资格,专业会员申请高级会员流程
  13. Yuga Labs「高处不胜寒」
  14. mysql useing_mysql中using where,using index
  15. 如何用未越狱手机安装ipa文件(更新版)
  16. 简单介绍长短期记忆网络 - LSTM
  17. PHP 导出到Excel表格中
  18. dismiss all popup view
  19. 熊猫烧香作者李俊的个人简历
  20. xs128之OLED12864

热门文章

  1. angular input_Angular 秒杀其它框架的设计之美(一)
  2. anacoda里面安装包显示失败_VScode离线安装插件,以及安装插件失败问题
  3. 此内容不能显示在一个框架中 ie_Chromium Edge中的IE兼容模式 与我们设想的有些不一样...
  4. Caffe + CUDA8.0 + CuDNNv5.1 + OpenCV3.1 + Ubuntu14.04 配置参考文献 ---- Wang Xiao Anhui University CVP
  5. 经典卷积网络进阶--GoolgleNet详解
  6. spring boot + vue + element-ui全栈开发入门——项目部署
  7. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...
  8. Linux有问必答:如何为在Linux中安装兄弟牌打印机
  9. mysql-5.6.x半同步复制配置
  10. Java中的classpath