【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四) (7)

永远小标驱动大表(小的数据集驱动大的数据集)

slect * from A where id in (select id from B)`等价于 #等价于 select id from B select * from A where A.id=B.id

当 B 表的数据集必须小于 A 表的数据集时,用 in 优于 exists

select * from A where exists (select 1 from B where B.id=A.id) #等价于 select * from A select * from B where B.id = A.id`

当 A 表的数据集小于B表的数据集时,用 exists优于用 in

注意:A表与B表的ID字段应建立索引。

order by关键字优化

order by子句,尽量使用 Index 方式排序,避免使用 FileSort 方式排序

MySQL 支持两种方式的排序,FileSort 和 Index,Index效率高,它指 MySQL 扫描索引本身完成排序,FileSort 效率较低;

ORDER BY 满足两种情况,会使用Index方式排序;①ORDER BY语句使用索引最左前列 ②使用where子句与ORDER BY子句条件列组合满足索引最左前列

尽可能在索引列上完成排序操作,遵照索引建的最佳最前缀

如果不在索引列上,filesort 有两种算法,mysql就要启动双路排序和单路排序

双路排序:MySQL 4.1之前是使用双路排序,字面意思就是两次扫描磁盘,最终得到数据

单路排序:从磁盘读取查询需要的所有列,按照order by 列在 buffer对它们进行排序,然后扫描排序后的列表进行输出,效率高于双路排序

优化策略

增大sort_buffer_size参数的设置

增大max_lencth_for_sort_data参数的设置

GROUP BY关键字优化

group by实质是先排序后进行分组,遵照索引建的最佳左前缀

当无法使用索引列,增大 max_length_for_sort_data 参数的设置,增大sort_buffer_size参数的设置

where高于having,能写在where限定的条件就不要去having限定了

数据类型优化

MySQL 支持的数据类型非常多,选择正确的数据类型对于获取高性能至关重要。不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择。

更小的通常更好:一般情况下,应该尽量使用可以正确存储数据的最小数据类型。

简单就好:简单的数据类型通常需要更少的CPU周期。例如,整数比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整型比较复杂。

尽量避免NULL:通常情况下最好指定列为NOT NULL

【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgppd.html