一直对 SQL 语句优化的认知仅仅停留在加索引,今天真正的优化了几个语句,才发现了一些索引也不能解决的问题。
目前为止接触比较多的语句优化,都是针对于 order by group by 这 2 个地方。
在判断 sql 语句的索引是否有正确使用到时,还是要通过 EXPLAIN 来查看执行计划。
在 mysql 的参数设置里面有 2 个参数控制索引的排序算法:
sort_buffer_size
max_length_for_sort_data
如果查询的数据量大于 max_length_for_sort_data 的值 就会采用比较慢的 Using filesort 索引排序,这种排序耗时很大。
所以在使用索引时需要先去确认执行计划里面索引排序是否有采用这种排序,如果有的话就要加大 max_length_for_sort_data 的值。
查看运行时的参数设置
mysqladmin variables
show variables;
show global variables like 'sql_mode';
show variables like 'sql_mode';
SELECT @@global.sql_mode, @@session.sql_mode, @@sql_mode;
SET sort_buffer_size=131072;
SET SESSION sort_buffer_size=131072;
SET LOCAL sort_buffer_size=131072;
SET @@session.sort_buffer_size=131072;
SET @@local.sort_buffer_size=131072;
SET @@sort_buffer_size=131072;
SET GLOBAL sort_buffer_size=131072, SESSION sort_buffer_size=131072;
SET @@global.sort_buffer_size=131072, @@local.sort_buffer_size=131072;
以上方法都是会重启回复,如果需要永久生效还是推荐在 mysql 的 my.ini 配置文件修改
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于