1.数据库优化之索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.数据库优化之索引相关的知识,希望对你有一定的参考价值。

  • 索引:索引是存储引擎用来快速找到记录的一种数据结构。同样,这也是索引的基本功能。
  • 索引对良好的性能非常重要,尤其是当数据量越来越大时,良好的索引设计愈发重要。如果索引设计的不合理,性能反而会下降。
  • 索引优化应该是对查询优化最有效的手段了,索引可以轻易的将查询性能提升几个数量级。修改索引时,通常需要重写查询。
  • 索引的工作机制:
    例如:select * from student where id = 5;
    假如在student表的id上创建了索引。查找记录时,先会在索引上找到id=5的行,然后根据匹配的索引记录找到对应的数据行。
  • 索引可以包含一个或多个列的值,当包含多个列的值时,列的顺序也十分重要,因为mysql只能高效的使用最左前缀列。
    创建一个包含两个列的索引和创建两个只包含一列的索引是大不相同的。
  • 索引的类型:
    索引是在存储引擎层实现的而不是在服务器层实现的,所以对于索引并没有统一的标准,不同的存储引擎对索引有不同的底层实现。
    1) B-Tree索引:使用B-Tree数据结构来存储数据,这就意味着所有的值都是按顺序存储的。B树可以加快数据的访问速度,因为存储引擎不再需要从全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索。父节点的槽中存储了该节点的值和指向子节点的指针,存储引擎通过比较该节点的值和要查找的值来选择合适的指针进入下一级节点,最终要么找到数据,要么数据不存在。
    因为B树索引是有序的,所以除了适用于按值查询外,还可以用于查询中的order by操作,可以用于索引定义的方式进行排序。
    B树索引的限制:①如果不是按照索引的最左列开始查找,则无法使用索引。例如创建一个索引以姓、名、出生日期三个字段的顺序创建的,那么这个索引无法用来查找名为makai的人或者某个特定日期出生的人,因为这两列都不是索引的最左列。类似的,也无法查找姓氏以某个字母结尾的人;
    ②不能跳过索引中的列。例如:查找姓为smith且在94年出生的人,则只会使用该索引的第一列。
    ③如果查询中包含某个列的查询范围,则其右边所有列都无法使用索引优化查找。例如:查询 where last_name = ‘smith‘ and first_name like ‘j%‘ and birthday = ‘1976-11-11‘,这个查询只会使用索引的前两列。
    综上,所以说索引的顺序非常重要。
  • 以上是关于1.数据库优化之索引的主要内容,如果未能解决你的问题,请参考以下文章

    性能优化之数据库优化

    mysql优化之索引

    聊聊Mysql优化之索引优化

    MySql之单机优化

    mysql优化之索引优化

    数据库优化之索引如何创建