Ich habe eine wirklich große Tabelle, die ganzzahlige Darstellungen von IP-Adressen und eine zweite Tabelle enthält, die Anfangs- und Endbereiche von Ganzzahlen Darstellungen von IP-Adressen hat. Die zweite Tabelle dient zur Rückgabe des Landes gemäß several stackoverflow articles. Obwohl dies die erforderlichen Ergebnisse liefert, ist die Leistung ziemlich schlecht. Gibt es eine bessere Alternative zum Beitritt zu einer Reihe? Im Folgenden finden Sie einen Beispielsatz von Code, der zeigt, wie der Join derzeit funktioniert:Optimale Leistung für Joining auf Wertebereich
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
Ich habe Ihren Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –
Funktioniert für mich. Vielen Dank. –
Haben Sie Indizes in Ihren realen Tabellen? Da Ihr Testskript keine erstellt, werden wahrscheinlich alle Hinweise für Sie zum Hinzufügen von Indizes verwendet. –