索引
平衡二叉树示意图。
聚簇索引
辅助索引
单列索引
联合索引: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