2
我有三列,以字節爲單位以下尺寸(總共8):4(INT),2(小INT),2(小INT)。
我在這三列(按上面指定的順序)上創建了一個多列(又名複合)索引。我將執行兩種類型的選擇查詢:
- 範圍根據第一個4字節的列查找。第一列將單調遞增(時間戳)。
- Key-ed查找指定了所有這三個值的位置。
問:Postgres將這三列組合成一個8字節的bigint並處理應用程序層中的分隔有什麼好處嗎?
我在詢問關於數據庫查詢和存儲效率的觀點。
對於案例#2,您會發現讀取的性能有所提高,但寫入需要更長的時間,因爲它需要更新3列而不是一個。索引本身實際上只是一個哈希集,它將佔據1列現有索引大小的3倍左右。多列索引不會增加單列搜索的性能。您需要#1的單列索引和#2的多列索引。請記住,您擁有的索引越多,寫入的速度就越慢。 –
@KraangPrime:多列索引絕對可以加速單列條件 - 特別是如果它們適用於第一列。但是,即使在某些情況下尾隨列 –
@a_horse_with_no_name - 對不起,我應該澄清。如果它不是主要索引,它沒有影響。如果您索引(A,B,C),並僅查詢(B)或(C)中的一個,則索引完全不用於查找。要查找使用索引,必須使用所有部分或至少主要部分產生任何影響。請參閱[此解釋](http://stackoverflow.com/a/2349824/3504007) –