Mysql-索引总结

索引(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内核会排序优化,但是建立联合索引时就有所谓了,遵循左前缀原则。
  8.删除不再使用或者很少使用的索引
  表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响
9.索引并不是越多越好,最多6个

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

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

10.emun 的情况或只有个位数级别的字段,没必要加索引
极端点的情况,90万的数据,source只有0和1两个值,利用索引要先读索引文件,然后二分查找,找到对应数据的数据磁盘指针,再根据读到的指针再读磁盘上对应的数据数据,影响结果集45万。这种情况,和直接全表扫描那个快显而易见。
11.索引对group by 有效
本质也是一个排序的过程,而索引帮其实现。
不知觉就看着这么多行了,真实一下子也记不住呀,但是仔细想想上边的每一条,在生产运用中还真该这么注意,发现一些问题如果能注意到上边的这么几条,还真有些道理。 所以,总结如下:

    注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。
读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。
自己觉得不错的一些文章,粘在这里分享一下:
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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值