MySQL[2]-查询性能优化
文章目录
慢查询基础
-
是否在检索大量不需要的行或列
-
是否在MySQL分析大量的数据行
-
覆盖索引
-
优化表结构
-
重构查询
重构查询的方式
复杂查询还是简单查询
对于现代MySQL数据库来讲,网络通信、查询解析和优化已经不是影响查询效率的因素,反而MySQL内部扫码数据所消耗的时间远大于数据返回客户端的时间。所以需要考虑是否可以将复杂查询进行拆解。
切分查询
比如分表、分区间等等。
分解关联查询
优势:
- 提升缓存效率。细化缓存粒度,提升缓存使用率。
- 减少锁竞争,提高并发量。
- 提升查询本身的效率,比如IN子句转换为索引已知范围查询。
- 减少冗余查询,提供查询结果利用率。
查询执行基础
MySQL查询优化器的局限性
关联子查询
IN 子查询。 全表扫描外表(表索引或者是表数据)再通过 内外表关联关系逐个查询内表。
union 的限制
…
优化特定类型的查询
count
count(*) 扫描数据忽略是否为null,而具体的字段则会忽略null值。