一、引擎:

主要的引擎:MyISAM、InnoDB

mysq建多个索引还是组合索引 mysql多个索引顺序_字段


手写顺序:

mysq建多个索引还是组合索引 mysql多个索引顺序_数据结构_02


执行顺序:

mysq建多个索引还是组合索引 mysql多个索引顺序_字段_03


二、索引

是一种数据结构,可以提高查找效率,排好序的快速查找数据结构

,b树索引,索引很大,因此以文件的方式存在于磁盘上,每次更新表的时候要重新更新索引,因此查找效率提高,表的更新变慢分类:

单值索引:一个索引只包含单个列,一个表可以有多个单列索引

唯一索引:列的值必须唯一,允许有空值

复合索引:一个索引包含多个列

mysq建多个索引还是组合索引 mysql多个索引顺序_字段_04


索引结构:b树

mysq建多个索引还是组合索引 mysql多个索引顺序_快速查找_05


适合建立索引的情况:

1)主键自动建立唯一索引

2)频繁作为查询字段的关键字应该创建索引

3)外键

不适合创建索引的情况:
1)频繁更新的字段
2)where条件里用不到的字段
3)表记录太少
4)包含重复的内容过多

mysql优化:

mysq建多个索引还是组合索引 mysql多个索引顺序_快速查找_06


mysq建多个索引还是组合索引 mysql多个索引顺序_mysq建多个索引还是组合索引_07


mysq建多个索引还是组合索引 mysql多个索引顺序_快速查找_08


mysq建多个索引还是组合索引 mysql多个索引顺序_数据结构_09


mysq建多个索引还是组合索引 mysql多个索引顺序_字段_10


mysq建多个索引还是组合索引 mysql多个索引顺序_数据结构_11


索引优化:

单表优化:

where和order by需要建立索引,且建立的联合索引中间的字段不能包含模糊查询,否则extra会出现using filesort

双表优化:
左连接,最终的表格左边表格均有,因此对右表建立索引
右连接,最终的表格右边表格均有,因此对左表建立索引

索引失效:

1)最佳左前缀法则:(只要包含了前面几个,顺序不重要)

mysq建多个索引还是组合索引 mysql多个索引顺序_数据结构_12


2)不能在索引上做操作,比如where筛选条件不能使用函数

3)不能出现范围查找:(范围后面的失效是指建立索引的顺序)

mysq建多个索引还是组合索引 mysql多个索引顺序_字段_13


4)is null和is not null无法使用索引

5)like查找,在右边加百分号才会使用索引**(使用覆盖索引来优化,即建立索引(多个索引)的字段包括了查询(select)以及筛选(where)的字段)**

6)or,所有字段都会失效