Mysql Order BY 速度

标签 mysql sql sql-order-by query-optimization mysql-5.7

有2个样本。

在第一个示例中,使用 orderby 可以更快地获得结果。 (根据 phpmyadmin 速度报告)

在另一个例子中,我没有使用 order by,它给出的结果较慢。 (根据 phpmyadmin 速度报告)

使用 Orderby 时,它给出快速结果是不是不合理?

排名对我来说并不重要,重要的是速度。

select bayi,tutar 
from siparisler 
where durum='1' and MONTH(tarih) = MONTH(CURDATE()) and YEAR(tarih) = YEAR(CURRENT_DATE()) 
order by id desc

速度:0.0006

select bayi,tutar
from siparisler 
where durum='1' and MONTH(tarih) = MONTH(CURDATE()) and YEAR(tarih) = YEAR(CURRENT_DATE())

速度:0.7785

最佳答案

order by 查询永远不会比没有 order by 子句的相同查询执行得更快。对行进行排序会给数据库带来更多的工作。在最好的情况下,排序变成空操作,因为 MySQL 首先以正确的顺序获取行:但这只是使两个查询在性能方面相等(它不会使排序更快的查询).

可能 order by 的结果已经被缓存了,所以 MYSQL 直接从缓存中给你结果而不是实际执行查询。

如果性能对您来说最重要,让我建议更改 where 谓词,以便不在 tarih 列上使用日期函数:这样的结构可以防止数据库利用索引(我们说谓词是不可 SARGable 的)。考虑:

select bayi, tutar 
from siparisler 
where 
    durum = 1 
    and tarih >= dateformat(current_date, '%Y-%m-01')
    and tarih <  dateformat(current_date, '%Y-%m-01') + interval 1 month
order by id desc

对于此查询的性能,请考虑 (durum, tarih, id desc, bay, tutar) 上的索引:它应该表现为 覆盖索引,即 MySQL可用于执行整个查询,甚至无需查看实际数据。

关于Mysql Order BY 速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63569946/

相关文章:

mysql - 如何使用 JDBC 中的文本字段值更新数据库?

python - 如何修复更新不起作用的情况

sql - PostgreSQL:按列排序,具有特定的 NON-NULL 值 LAST

sql-server - SQL Server 使用 Case When 和常量的语法进行排序

mysql - 根据记录中的日期不同输出

mysql - SQL:使颜色表中的颜色可搜索

php - 如何将数据库中最后两个插入值的 id 匹配到包含相同值的新数组

sql - ORDER BY 几列中的 CASE

MySQL:有点复杂的查询返回错误的计数结果

mysql - 我的 innodb 表为 count(*) 返回 0