在這裏使用Microsoft SQL Server。 鑑於這種設置(在兩列的聚集索引):如何在多鍵索引上進行簡單範圍掃描?
use tempdb;
CREATE TABLE mytemp
(
N1 INT NOT NULL,
N2 INT NOT NULL,
PRIMARY KEY (N1, N2)
);
INSERT mytemp (N1, N2)
SELECT N1.number, N2.number
FROM (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) AS N1(number)
CROSS JOIN (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) AS N2(number)
我怎樣才能後,即可獲取價值N1 = 5,N2 = 6(時N1有序,N2)?我有以下嘗試。
declare @n1boundary int = 5;
declare @n2boundary int = 6;
SELECT N1, N2
FROM mytemp
WHERE N1 = @n1boundary AND N2 > @n2boundary
OR N1 > @n1boundary
ORDER BY N1, N2
它給了我想要的結果,但語法看起來很笨拙,它執行兩次掃描。在理論上,我認爲應該可以通過一次掃描來完成。
[編輯]我在看的掃描都SET STATISTICS IO報告的數字設置爲ON:
Table 'mytemp'. Scan count 2, logical reads 4
你確定你沒有錯過OR部分的幾個parens嗎? – 2011-04-04 15:55:28
缺少的括號是一個意外。事實證明,預期優先順序(whew)。 – 2011-04-04 16:00:53