SQL SERVER - 使用BETWEEN运算符有效地连接两个表

时间:2014-09-22 20:39:20

标签: sql sql-server indexing geolocation inner-join

我看过类似的帖子,但没有确凿的答案。

我正在使用geolite(免费数据库)将ip块查找到geo ip,并希望批量执行此操作 -

各个IP已经转换为ipblocks,并坐在表格(L)。

每个ipblock都在一个范围内(在startIpNum和endIpNum之间),它位于另一个表(g)中。

然而,下面的查询工作效率非常低,特别是因为我需要在很长一段时间内执行此操作 -

SELECT l.ipAddress, g.locId
FROM l
INNER JOIN g ON l.ipblock BETWEEN g.startIpNum AND g.endIpNum

两个表都已编入索引(g为复合索引),

由于在BETWEEN运算符上进行连接,因此无法执行HASH连接。

重组表g是唯一可行的选择吗?还是有另一种方式?

1 个答案:

答案 0 :(得分:0)

单个查询的最佳索引是其节点中WHERE / JOIN子句中的所有列以及{{{{}}中的所有列的索引。 1}}子句在叶子中(如果不在节点中)。

尝试将此索引放在表SELECT上,看看性能是否有所改善:

l