Tôi có một bảng thực sự lớn chứa đại diện số nguyên của địa chỉ IP và bảng thứ hai có dãy bắt đầu và kết thúc của số nguyên biểu diễn địa chỉ IP. Bảng thứ hai được sử dụng để trả lại quốc gia theo several stackoverflow articles. Mặc dù điều này trả về kết quả yêu cầu, hiệu suất khá kém. Có cách nào khác để thực hiện thay thế cao hơn để tham gia vào một phạm vi không? Bên dưới là một bộ mã mẫu cho biết cách hoạt động của tính năng tham gia hiện tại:Hiệu suất tối ưu để tham gia vào dãy giá trị
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
Tôi đã chỉnh sửa tiêu đề của bạn. Vui lòng xem, "[Câu hỏi có nên bao gồm" thẻ "trong tiêu đề của họ không?] (Http://meta.stackexchange.com/questions/19190/)", trong đó sự đồng thuận là "không, họ không nên". –
Làm việc cho tôi. Cảm ơn. –
Bạn có chỉ mục trong bảng thực sự của mình không? Bởi vì kịch bản thử nghiệm của bạn không tạo ra bất kỳ nên có thể mọi lời khuyên được đưa ra sẽ cho bạn thêm các chỉ mục. –