15、Explain详解与索引最佳实践
2025-08-29 09:36:13 0 举报
AI智能生成
最佳实践通常涉及到编写高效、可维护和可扩展的代码。在处理大数据集或实现复杂系统时,详细的解释(Explain)和优化索引策略对于确保性能至关重要。Explain命令在多种数据库管理系统中提供了一种方式,可以查看特定查询的执行计划。这有助于开发者理解查询如何进行全表扫描或是使用索引,并可以指出潜在的性能瓶颈。在最佳实践中,开发者应该经常使用Explain工具来审查和优化查询。 良好的索引实践包括设计能够快速检索数据的索引,例如创建覆盖所需字段的索引,并定期维护它们以保持其效率。错误的索引选择可能导致查询缓慢且消耗过多资源。此外,理解索引的不足和过度索引的缺点也同样重要。避免创建过多索引,因为每个索引都会占用额外的存储空间,并且在数据更改时需要更新,这可能会导致数据库性能降低。 总之,将Explain命令的使用与精心设计和维护的索引策略结合起来,可以大大提升数据库操作的性能,确保数据检索速度。这一点在处理海量数据时尤为重要,也是构建高效应用程序的重要组成部分。在项目中实践这些最佳做法可以帮助提高整体系统的稳定性和可靠性。
作者其他创作
大纲/内容
Explain sql的执行计划
不同版本有稍微区别5.6 需要加extended关键字,才显示partitions。filtered
show warnings; 展示优化后的语句
字段含义
id执行级别数字最大最先执行
select_type简单还是复杂查询
子主题
table 执行的哪个表
partitiins如果查询是基于分区表的话,会显示查询将访问的分区。
type;关联类型或访问类型 级别依次从最优到最差分别为:system > const > eq_ref > ref> range > index > ALL
system 表里只有一行记录
const 主键查询 或者唯一索引只有一条
eq_ref left join 主键关联查询
ref 普通索引 或者联合索引
range 范围查找走索引
index 全表查询 一般会走二级索引 二级索引一般较小
最好优化到range或者ref
ALL 全表查询 走主键索引
system 表里只有一行记录
const 主键查询 或者唯一索引只有一条
eq_ref left join 主键关联查询
ref 普通索引 或者联合索引
range 范围查找走索引
index 全表查询 一般会走二级索引 二级索引一般较小
最好优化到range或者ref
ALL 全表查询 走主键索引
pouble_kes这一列显示查询可能使用哪些索引来查找
key
key_len
联合索引会显示,会显示用到的字节显示4 一个字段字节2 第二个字节2 表示用到了两个字段索引
ref
显示关联的字段
rows
MYSQL 查询扫描行数 就是具体返回的行数 是大概 了解就行
filtered 可能和其他表的关联行数 了解就行
extra
Using index:使用覆盖索引:只需要辅助索引就能查到结果 不用回表查询
Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖
Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖
太多了大概了解就行吧
索引最佳实践
联合索引最左前缀规则
不在索引做函数,计算,类型转换 ,(自动or 手动)操作会导致索引失效 全表扫描
联合索引不能使用右边的列 导致索引失效
尽量使用覆盖索引 只访问索引的查询 尽量不要用 select*
在使用不等于(!=或者<>),not in ,not exists 的时候无法使用索引会导致全表扫描.< 小于、 > 大于、 <=、>= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引
is null,is not null 一般情况下也无法使用索引
.like以通配符开头('$abc...')mysql索引失效会变成全表扫描操作,百分号在前索引也会失效
字符串不加单引号索引失效 因为会给字段做类型转换
少用or 或者in 有可能 走和不走索引 后续课会讲
范围查找数据库太大不会走索引 拆分多条
不在索引做函数,计算,类型转换 ,(自动or 手动)操作会导致索引失效 全表扫描
联合索引不能使用右边的列 导致索引失效
尽量使用覆盖索引 只访问索引的查询 尽量不要用 select*
在使用不等于(!=或者<>),not in ,not exists 的时候无法使用索引会导致全表扫描.< 小于、 > 大于、 <=、>= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引
is null,is not null 一般情况下也无法使用索引
.like以通配符开头('$abc...')mysql索引失效会变成全表扫描操作,百分号在前索引也会失效
字符串不加单引号索引失效 因为会给字段做类型转换
少用or 或者in 有可能 走和不走索引 后续课会讲
范围查找数据库太大不会走索引 拆分多条
索引总结
0 条评论
下一页