• Mysql-索引和执行计划


    索引

    平衡二叉树示意图。

    聚簇索引

    辅助索引

    单列索引

    联合索引:i ndex(a,b,c) 查询条件一定要带a才能走索引(最左列)

    前缀索引

    由于索引列,字符太长,占用空间太大,索引树高度增高。

    查询时需要检索更多的索引也。

    Mysql中建议3,4层。

    所以可以选择大字段的前部分作索引。

    2.数据库行过多

    1.索引字段较长,前缀索引。

    2.数据行过多:分区表,归档表(pt-archive),分布式架构。

    3.数据类型;选择合适的数据类型。

    索引管理

    索引常建在 where ,group by ,order by,join on ...的条件。

    查询索引

    desc tbxx;
    

    Key:

    PRI 聚簇索引

    MUL 辅助索引

    UNI 唯一索引

    查询索引详细信息。

    show index from User;
    

    建立索引

    alter table User add index idx_pd(pwd);
    

    联合索引

    alter table User add index idx_pd(a,b);
    

    前缀索引,(前5个字符组成索引)

    alter table User add index idx_pd(district(5));
    

    删除索引

    alter table User drop index idx_pd;
    

    执行计划

    在查询语句前加desc或explain可查看执行计划、

    table :此次语句涉及的表

    type : 查询类型,全表扫,索引扫

    • 全表扫描:ALL

    • 索引扫描:index < rang < ref < eq_ref < const(system)

      index:全索引扫描,扫整个索引树。

      range:索引范围查询 <> like in or between and

      ref:辅助索引的等值查询

      eq_ref:多表链接中,非驱动表链接条件为主键和唯一索引

      const[system]:聚簇索引等值查询。

    possible_keys:可能用到的索引

    key : 最后选择的索引

    key_len : 联合索引,索引覆盖长度

    • index(a,b,c),覆盖越多越好。

    • where a=1 and b=2 and c=3 key_len = a长度+b长度+c长度

    • 长度:列的最大储值字节长度。

    • 数字 :

      ​ not null null

      • tinyint 1 1+1
      • int 4 4+1
      • bigint 8 8+1
    • 字符 utf-8 一个字符最大占3个字符

      ​ not null null

      char(10) 3x10 3x10+1

      varchar(10) 3x10+2 3x10+2+1

    rows : 此次查询需要扫描的行数

    Extra :额外的信息

    • using filesort:表示此次查询使用到了文件排序。
      • order by ,group by ,distinct
  • 相关阅读:
    Sencha touch 初体验
    Android开发——NDK开发入门
    Android开发——Activity(活动)的生命周期(上)
    Android开发——构建自定义组件【转】
    Android开发——使用Gallery实现“多级联动”
    Android开发——Android搜索框架(一)
    LINQ之路 6:延迟执行(Deferred Execution)
    .Net小笔记之.NET Framework的内容
    c#高级编程学习笔记之创建一个简化的链表类
    C#高级编程读书笔记之泛型的优点
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/14378302.html
Copyright © 2020-2023  润新知