您的位置:首页 > 数据库 > MySQL

Mysql-索引总结

2016-12-08 23:02 405 查看
索引(Index)是帮助MySQL高效获取数据的数据结构

下边是自己整理的资料与自己的学习总结,,做一个汇总。

一.真的有必要使用索引吗?

不是每一个性能问题都可以通过创建一个索引来解决;有很多其它解决性能问题的方式

a).各个应用层的缓存,

b).调优数据库参数和缓冲区大小,

c).调优数据库连接池大小或者线程池大小,

d).调整数据库事务隔离级别,

f).在夜间安排批量删除,避免不必要的锁表,

其它等等。

二.mysql索引类型normal,unique,full text的区别

1.PRIMARY, INDEX, UNIQUE 这3种是一类

normal:表示普通索引

unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique,特殊的,主键primary_key默认非空唯一

2.FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。

full text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。
详细信息参考:http://blog.sina.com.cn/s/blog_887d00920100wgf3.html

三.索引总结

为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。
本小节将向读者介绍一些索引的设计原则。干货呀!

  1.选择唯一性,单调性的索引
  唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。单调性指的是数字递增或递减,比如ID,这样效率会高
(相关文章:Mysql-聚簇索引)
  2.为经常需要排序、分组和联合操作的字段建立索引
  经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
  3.为常作为查询条件的字段建立索引
  如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
  4.限制索引的数目
  索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。
  5.尽量使用数据量少的索引
  如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。避免不了,解决方法见6.
  6.尽量使用前缀来索引
  如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

不错的网络文章参考 :(MySQL前缀索引和索引选择性)http://www.cnblogs.com/gomysql/p/3628926.html

7.注意联合索引的顺序,遵循左匹特性配

在select中where条件的先后顺序无所谓SQL内核会排序优化,但是建立联合索引时就有所谓了,遵循左前缀原则。
相关叙述Mysql-索引数据结构
最后边结论

 8.删除不再使用或者很少使用的索引

  表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响

9.索引并不是越多越好,最多6个

索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,

所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过 6 个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
10.emun 的情况或只有个位数级别的字段,没必要加索引

极端点的情况,90万的数据,source只有0和1两个值,利用索引要先读索引文件,然后二分查找,找到对应数据的数据磁盘指针,再根据读到的指针再读磁盘上对应的数据数据,影响结果集45万。这种情况,和直接全表扫描那个快显而易见。

11.索引对group by 有效

本质也是一个排序的过程,而索引帮其实现。
详细请见:Mysql-索引优化策略
第三条

不知觉就看着这么多行了,真实一下子也记不住呀,但是仔细想想上边的每一条,在生产运用中还真该这么注意,发现一些问题如果能注意到上边的这么几条,还真有些道理。所以,总结如下:



  注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。
读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。

自己觉得不错的一些文章,粘在这里分享一下:

MySQL索引背后的数据结构及算法原理:http://blog.jobbole.com/24006/

B-树和B+树的应用:数据搜索和数据库索引:http://blog.sina.com.cn/s/blog_4e0c21cc01010itp.html

从MySQL Bug#67718浅谈B+树索引的分裂优化:http://hedengcheng.com/?p=525

MySQL存储引擎--MyISAM与InnoDB区别:http://blog.csdn.net/xifeijian/article/details/20316775
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: