mysql中提高Order by语句查询效率的两个思路分析

2019-01-03 18:31:23王振洲

通常情况下,为了避免使用Order By语句导致的查询速度变慢的问题,先是需要考虑使用索引来解决问题。如果不能够通过索引来解决问题,那么可以通过缓存在一定程度来缓解。如可以增加soft_buffer_size变量的大小、根据实际情况调整Read_buffer_size变量的大小、更改tmpdir目录将其指向具有大量空闲空间的专用文件系统等等。有时候管理员可以使用这个特性将负载均匀分布到多个目录中去。

二、使用Explain关键字来确认是否可以通过索引来解决Order BY速度问题。

如果用户无法确定是否可以通过索引来提高Order By语句的查询效率,那么就可以凭借Explain关键字来帮助关键员进行判断。如可以通过使用explain select * from ad_user where is_active='Y' order by value(即在常规的查询语句前面加上一个explain关键字),用来判断是否可以使用索引来提高查询的效率。判断的方法是:如果这个查询语句中,有一个using filesort这个字段,那么就非常的抱歉,无法通过使用索引来提高这个语句的查询效率。反之,没有这个字段,则说明可以通过索引来提高查询效率。

这里需要说明的是,通常情况下文件排序优化不仅仅可以用于记录排序关键字和行的位置,并且还会记录查询所需要的列。如此的话,就可以避免多次读取行的信息。为了让大家更加明白其中的道理笔者简单说明一下这工作的过程。通常情况下,文件排序优化包括四 个步骤。第一步读取与Where条件语句所匹配的行信息;第二步对于每个行、记录构成排序关键字和行位置的一系列值,并且记录查询所需要的列;第三步根据排序关键字排序元祖;第四步按排序的顺序检索行,不过此时是直接从排序的元祖读取所需要的列(使用的是第三个步骤中的结果),而不会重新访问表中的数据。显然使用文件排序优化的思路,可以避免重复访问表,从而提高查询的效率。

原文链接:http://publish.itpub.net/a2011/0225/1160/000001160766.shtml

您可能感兴趣的文章:

Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍MySQL中使用or、in与union all在查询命令下的效率对比Mysql联合查询UNION和Order by同时使用报错问题的解决办法数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍oracle,mysql,SqlServer三种数据库的分页查询的实例MYSQL随机抽取查询 MySQL Order By Rand()效率问题mysql仿oracle的decode效果查询MySql带OR关键字的多条件查询语句