• Mysql常用索引及优化


      索引是帮助我们快速获取数据的数据结构。索引是在存储引擎中实现的,因此不同存储引擎的索引也不同。这里只介绍InnoDB存储索引所支持的BTree索引:

    一、索引类型

      为了方便举例子,先创建表person:

        

      1、创建普通索引

        

      2、创建唯一索引

        

      3、主键

        主键是特殊的唯一索引,必须指定为PRIMARY KEY,常使用AUTO_INCREMENT自增主键。

      4、联合索引

        多列联合建立的索引

        

        该联合索引相当于一下三个索引:

          name;

          name, age;

          name, age, telnumber;

        而age和age,telnumber上没有索引,因为BTree索引遵循最左前缀原则。

    二、索引优化

    1、选择索引

      可以考虑在where字句中出现的列或join字句出现的列上创建索引

              

    2、最左前缀原则

      对于联合索引(name, age, telnumber),B+树是按照从左到右的顺序建立搜索树的;如('zhangsan', '18', '15237502296'),先匹配name字段来确定搜索方向,name匹配成功再匹配age字段、telnumber字段,最终检索到目标数据。

      该联合索引是三级索引,从左到右依次去匹配,一个字段匹配成功才能去匹配下个字段,拿('18','15237502296')来检索时,因为没有拿到一级索引,无法确定下一步索引方向。('zhangsan',  '15237502296')来索引时情况一样,name匹配成功后,没有age这个二级索引,只能在name相同的情况下,去遍历所有的telnumber。

      B+树的数据结构决定了,使用的时候必须遵循最左前缀原则,尽量将经常参与查询的字段放在联合索引的最左边。

    3.like的使用

      一般情况不建议使用like,若非使用不可的话,注意like '%aa%'不能使用索引,like 'aaa%'可以使用索引。这也是最左前缀原则的一个使用场景。

    4、不能使用索引的说明

      MySQL按照联合索引从左到右匹配,直到遇见范围查询,如>,<,between,like等就停止匹配,a = 1 and b = 2 and c > 3 and d = 4,如果建立联合索引(a, b, c, d),d是不会使用索引的,若索引顺序是(a, b, d,c),a,b,c,d都会使用索引,只是c最终是一个范围值。

    5、order by

      order by有两种排序方式:(1)using filesort使用算法在内存中进行排序(慢);(2)使用索引进行排序(快)

      (1)

       如果age是单列索引,order by使用索引;

      (2)  

      若telnumber是单列索引,age不是索引或是单列索引,order by不能使用索引,因为MySQL每次查询的时候只能从众多索引中选择一个,而这次选择了telnumber。建立联合索引(telnumber, age),order by就能使用索引,注意遵循最左查询原则不要建立(age, telnumber)联合索引。

      最后需要注意,MySQL对排序的记录大小有限制,当记录大于max_length_for_sort_data(1024)时,order by不能使用索引,只能使用using filesort。

        更多order by请参考链接:http://blog.csdn.net/zht666/article/details/18010539

        

      

      

  • 相关阅读:
    【持久化框架】Mybatis与Hibernate的详细对比
    [Linux] day03——REHL部署
    [Linux] day02——什么是Linux
    [Linux] day01——运维
    java也可以做出很漂亮的界面
    python的沙盒环境--virtualenv
    Java虚拟机(JVM)中的内存设置详解
    高手教大家如何配置JVM参数
    最全的静态网站生成器(开源项目)
    Java 8 简明教程
  • 原文地址:https://www.cnblogs.com/lmmblogs/p/8574309.html
Copyright © 2020-2023  润新知