以MySQL为例我们来聊聊,索引创建原则和执行计划分析。

什么情况下需要创建索引?

主键自动创建唯一索引;

经常作为查询条件的字段必须建立索引;

查询中与其他字段相关的字段以及关键外部关系必须建立索引;

经常更新的字段不创建索引;

不创建索引的情况下不使用的字段。
构建索引;

选择单键/组合索引,在高并发情况下通常倾向于创建复合索引;

对于查询中的排序字段,如果排序的字段是by通过索引访问,会大大提高排序的速度;

查询时对字段进行统计或分组;

什么情况下不需要创建索引?

表中记录太少

频繁增删改查字段

创建索引虽然提高了查询速度,但也会降低表的更新速度,因为插入和更新表删除因为当表更新时,MySQL不仅需要保存数据,还需要保存索引文件。

数据重复、分布均匀的表字段应该只在查询最频繁、排序最频繁的数据列上创建索引。
如果一列数据包含多个重复项,为其建立索引不会有太大的实际效果。

a.如果一个表有10万条记录,一个字段A只有两个值:T和F,并且每个值的分布概率约为50%,那么在该表的字段A上创建索引一般不会提高该表的查询速度数据库。
b.索引选择性是指缩略图列中不同值的数量相对于表中记录的数量。
如果表中有2000条记录,表的索引列有1980个不同的值,则索引的选择性为1980/2000=0.99。
索引的选择性越接近1,索引效率越高。

MySQL性能分析MySQL常见性能瓶颈

CPU:CPU一般出现在CPU饱和时数据加载到内存或从磁盘读取时

IO:加载时出现磁盘I/O瓶颈数据远大于内存容量

服务器硬件性能瓶颈:top、free、iostat、vmstat,用于查看服务器的性能状态系统

MySQL执行计划

什么是执行计划?

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句的过程,从而了解MySQL如何处理您的SQL语句,分析查询语句或表结构的性能瓶颈。

什么可以帮助我们执行执行计划?

a.读表顺序B.数据读取操作的类型c.优化器可以使用哪些索引以及查询该行

执行计划的CASE情况演示

案例分析

第一行(执行顺序4):id列为1,表示union第一个select,select_type主表表该查询是外部查询,表列标记为,表示查询结果来自派生表,其中derivative3中的3表示该查询源自第三个select查询,即select[selectd1.namewithid3...]

第二行(执行顺序为2):id为3,这是整个查询中第三个选择的一部分,因为查询是包含在from中,是派生的。
[selectid,namefromwhereother_column='']

第三行(执行顺序为3):选择列表中的子查询select_type为subquery,是整个查询中的第二个选择。
[selectidfromt3]

第四行(执行顺序为1):selectt_typeisunion,表示第四次选择是unin和[selectname,idfromt2]先执行

第五行(执行顺序为5):从表示union的临时表中读取,在行阶段,表的列中的表示第一和第四选择结果用于合并操作。
【连接两个结果的操作】

mysql状态类型字段怎么建索引

1、如果只有0和1,加索引可能没用当查询数据超过总数据的20%时,索引会失败2、如果修改这个字段是主旋律,加索引会带来性能损失更新操作。
3.如果确保使用状态字段来查询您正在查询的数据。