因此,我有一个包含度范围的mysql表,我应该用另一个度范围进行查询。
目前,我正在执行以下查询:
SELECT * FROM degrees WHERE
start_date = '2017-01-01' AND finish_date = '2018-01-01'
AND (
(0.51797199999999 BETWEEN begin_degree AND end_degree)
OR (2.836271 BETWEEN begin_degree AND end_degree)
OR (6.953746 BETWEEN begin_degree AND end_degree)
OR (9.684033 BETWEEN begin_degree AND end_degree)
OR (13.877806 BETWEEN begin_degree AND end_degree)
...
)问题是这个度度表中有数百万行,每个查询或多或少有200个or语句。正因为如此,查询需要7-8秒才能运行,我必须按请求执行另外10个类似的查询。
那么,有没有人知道更好/更快的查询方法?我还创建了start_date、finish_date、begin_degree和end_degree的索引。
提前谢谢。
发布于 2017-04-14 03:21:40
我会说,7-8秒的查询并不是那么糟糕。我的一个建议是在(start_date, finish_date begin_degree, end_degree)上建立索引。这可能有助于提高性能。
https://stackoverflow.com/questions/43400137
复制相似问题