我看过类似的帖子,但没有确凿的答案。
我正在使用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是唯一可行的选择吗?还是有另一种方式?
答案 0 :(得分:0)
单个查询的最佳索引是其节点中WHERE
/ JOIN
子句中的所有列以及{{{{}}中的所有列的索引。 1}}子句在叶子中(如果不在节点中)。
尝试将此索引放在表SELECT
上,看看性能是否有所改善:
l