首页 > 解决方案 > MySQL ORDER BY CASE 优化

问题描述

我查看了互联网,但找不到此特定查询的解决方案。我有这个查询:

SELECT *
FROM profile
ORDER BY CASE WHEN country_geoname_id = 2635167 
              THEN 1 ELSE 0 END DESC, 
         score DESC

我想知道是否可以通过避免文件排序来优化此查询。我为列 (country_geoname_idscore) 创建了一个索引,但它没有帮助。

解释选择:

解释选择

标签: mysqloptimizationfilesort

解决方案


当你把你的订单条件放在一个函数中时,它就变得不可预测了。

是什么让 SQL 语句可搜索?

如果你想使用索引创建一个额外的布尔字段isMyCountry并为它创建一个索引

然后你的查询变成了:

SELECT *
FROM profile
ORDER BY isMyCountry, 
         score DESC

推荐阅读