找到與同一表中的其他人重疊的所有條目的最有效方法是什麼?每個條目都有一個開始和結束日期。例如,我有以下數據庫設置:在SQL表中查找高效的重疊條目
CREATE TABLE DEMO
(
DEMO_ID int IDENTITY ,
START date NOT NULL ,
END date NOT NULL
);
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (1, '20100201', '20100205');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (2, '20100202', '20100204');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (3, '20100204', '20100208');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (4, '20100206', '20100211');
我的查詢看起來如下:
SELECT DISTINCT *
FROM DEMO A, DEMO B
WHERE A.DEMO_ID != B.DEMO_ID
AND A.START < B.END
AND B.START < A.END
問題是,當我的演示表有例如20'000行查詢時間太長。我的環境是MS SQL Server 2008的 感謝任何更有效的解決方案
添加索引開始/結束列。 – bobince 2010-06-02 11:53:33
我認爲你還應該使用A.DEMO_ID
Thierry
2010-06-02 12:00:37