如何加快使用BETWEEN条件的SQL查询?

Dan*_* T. 3 mysql sql optimization

我有一个看起来像这样的表:

ID    StartRange    EndRange
----------------------------
 1        1            3
 2        4            8
 3        9           12
Run Code Online (Sandbox Code Playgroud)

依此类推,因此有超过500万条记录。最后一条记录如下所示:

ID        StartRange    EndRange
---------------------------------
5235976   9894727374   9894727378
Run Code Online (Sandbox Code Playgroud)

换句话说,StartRangeEndRange永远不会为每个记录重叠。

我需要进行查询,以找到与范围匹配的数字的对应ID:

SELECT ID FROM BigTable WHERE '5000000' BETWEEN StartRange AND EndRange;
Run Code Online (Sandbox Code Playgroud)

不幸的是,此查询需要几秒钟才能完成。我需要对其进行优化,以使其花费最少的执行时间。我做了一点研究,看起来添加索引似乎无济于事,因为它仅在数字恰好是StartRangeEndRange值时才适用,但在介于两者之间的情况下才适用。

有没有人有任何我可以用来减少执行时间的提示或技巧?理想情况下,我希望它在1秒以下。

And*_*rew 5

我在ip地址范围表中遇到了类似的问题,以下内容确实为我解决了问题。您将需要至少在StartRange上的索引。

SELECT ID
FROM BigTable
INNER JOIN
  (SELECT MAX(StartRange) AS start
   FROM BigTable
   WHERE StartRange <= @Target) AS s
ON StartRange = s.start
WHERE EndRange >= @Target;
Run Code Online (Sandbox Code Playgroud)