從性能的角度來看,以下SQL是好還是壞的做法?SQL索引性能,哪個更好?
兩個查詢,通過一個共同的列搜索:
CREATE INDEX tbl_idx ON tbl (a, b);
SELECT id, a, b
FROM tbl
WHERE a = @a
AND b = @b;
SELECT id, a, b
FROM tbl
WHERE b = @b;
從性能的角度來看,以下SQL是好還是壞的做法?SQL索引性能,哪個更好?
兩個查詢,通過一個共同的列搜索:
CREATE INDEX tbl_idx ON tbl (a, b);
SELECT id, a, b
FROM tbl
WHERE a = @a
AND b = @b;
SELECT id, a, b
FROM tbl
WHERE b = @b;
該指數
CREATE INDEX tbl_idx ON tbl (a, b);
將這些查詢
where a= and b =
where a= and b>
where a like 'someval%' and b=
而不是有用有用這些查詢:
where b=
where a> and b=
where a like '%someval%' and b=
where isnull(a,'')= and b=
總之,在多列索引中,如果SQL Server能夠在第一個關鍵列上執行查找,那麼索引將會很有用。
回到你的問題,第一個查詢將從您創建的索引中受益,而第二個查詢可能傾向於在此索引上執行掃描..
有很多因素決定seek是好還是壞。在某些情況下,SQL Server可能傾向於不使用可用的索引,如書籤查找成本超出限制。 。
參考文獻:
如果顛倒索引列順序(B,A),則索引可以是兩個查詢是有用的。此外,如果id
是作爲聚集索引實現的主鍵,則該索引將覆蓋這兩個查詢,因爲聚集鍵隱式地包含爲行定位符。否則,ID可以顯式地添加爲包括列,提供最佳的性能:
CREATE INDEX tbl_idx ON tbl (a, b)
INCLUDE(id);
請標記相關RDBMS – TheGameiswar
首先查詢更適合你的索引。對於第二個查詢,您將使用單列索引。 –
如果索引在(a,b)上,那麼只有b上的查詢不會使用它。 – njzk2