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
原文地址:https://www.cnblogs.com/JinweiChang/p/14378302.html