我有一个非常大的表,其中包含 IP 地址的整数表示形式和第二个表,其中包含 IP 地址的整数表示形式的起始和结束范围。第二个表用于根据几个 stackoverflow 文章返回国家/地区。尽管这会返回所需的结果,但性能相当差。除了加入某个范围之外,还有其他性能更高的替代方案吗?下面是一组示例代码,显示了连接当前的工作方式:
CREATE TABLE #BaseTable
( SomeIntegerValue INT PRIMARY KEY);
INSERT INTO #BaseTable (SomeIntegerValue)
SELECT SomeIntegerValue
FROM (VALUES
(123), (456), (789)) Data (SomeIntegerValue);
CREATE TABLE #RangeLookupTable
( RangeStartValue INT PRIMARY KEY
, RangeEndValue INT NOT NULL);
INSERT INTO #RangeLookupTable (RangeStartValue, RangeEndValue)
SELECT RangeStartValue, RangeEndValue
FROM (VALUES
(0, 100), (101, 200), (201, 300)
, (301, 400), (401, 500), (501, 600)
, (701, 800), (901, 1000)) Data (RangeStartValue, RangeEndValue);
SELECT *
FROM #BaseTable bt
JOIN #RangeLookupTable rlt
ON bt.SomeIntegerValue BETWEEN rlt.RangeStartValue AND rlt.RangeEndValue