我有以下用例:
我的表(重要部分):
CREATE TABLE transfers (
id int,
product_id int,
source_location_id int,
destination_location_id int,
quantity int,
created_at datetime
);
现在我的查询是:
SELECT *
FROM transfers
WHERE (source_location_id = 123 OR destination_location_id = 123)
ORDER BY created_at DESC
LIMIT 100 OFFSET 400
目前,该表包含2000万行,此查询需要2-3分钟才能完成)
有没有一种方法可以为OR
子句创建一个索引,因为这个特定的id
对于SELECT中的两个位置总是相同的。
我看到一些人提到了OR子句的联合,但我使用的ORM不支持UNIONS
也不支持SUBQUERIES
,而且联合不支持分页。
1条答案
按热度按时间jgzswidk1#
不,没有索引可以帮助这一点。要对这个查询进行索引,你需要一个联合,最好像这样:
如果source和destination不相同,则应使用UNION ALL。
或者,添加另一个表,如:
其中包含每个传输的源和目标行,并从中选择连接传输。