Index
查詢A列,按B排序-如果A和B一起是PK,是否需要索引?
我有一個表(在 Postgresql 中),它在 a 和 b 列上有一個主鍵。我想做一個查詢:
select * from table where a='XXX' order by b;
現有的主鍵是否有助於提高該查詢的性能?
我可以通過創建一個或多個其他索引來提高性能,例如。a 上的索引和/或 b 上的索引?
不,如果您已經有一個索引
(a, b)
並且 PK 約束意味著您有,那麼對於這個查詢,您不需要任何其他東西。單獨的索引
(a)
和(b)
不會有用。唯一可能比 (a, b) 上的索引更好的是覆蓋索引。假設您有一個查詢,其中只有
SELECT b, c, d
選擇列表中的列,而表有大約 10 多列。然後,一個索引(a, b) INCLUDE (c, d)
或缺少該索引(a, b, c, d)
將比表窄得多,並且完全適合查詢。這將產生一個更好的查詢計劃(只有一個獨立的搜尋,不需要訪問表),當然代價是您有一個針對特定查詢的附加索引。