在一個id表,幾個鍵值和其他一些 「數據」 欄:設計表的索引
T1:ID,K1,K2,K3,數據1,數據2,...
ID是獨特的。
k1有幾百個不同的值。
對於K1的每一個不同的值有幾千爲K2不同的值。
對於K1的每個不同的組合,K2有幾十(或一點點)行,其中通常K3是所有這些記錄爲空字符串和其他一些K3值只會出現一次,每(K1,K2 ),偶爾它會出現兩三次。
我會希望得到一組記錄where k1=K1V and K2=K2V and K3=K3V
, 但我也知道,這相當於詢問where k1=K1V and K3=K3V
或where k2=K2V and K3=K3V
因爲K2的任何specifiv值將始終具有相同的K1值。
或者我應該問一下where K3=K3V and K2=K2V and K1=K1V
或where K3=K3V and K1=K1V
或where K3=K3V and K2=K2V
? (因爲K3列中空字符串值的悔改)。
會是什麼使這個查詢的最佳方法是什麼?我應該爲此創建什麼索引?
會改變它的答案,如果在對K1不同的值,K2的不同值的量的變化被稱爲是大嗎? (即一些K1V的有5個K2V的與之相關聯的,而另一些thousends)
我知道它不是標準化的。而K1和K2是其他表格的唯一鍵。但我仍然希望我的Q能夠通過更好地理解索引來回答。我的印象是,在這種情況下有重複的數據可能有助於表演......或者我錯了嗎? – epeleg
您使用哪些DBMS可能會影響答案?我的建議是測量性能,並選擇最適合您最常見場景的性能。確保您的桌面上的統計數據保持最新。一般來說,對於SQL Server來說,最好給查詢優化器提供更多選項來加入數據,並讓它根據可用的索引和統計信息選擇最佳方式。如果空間(和插入/更新性能)較少考慮,則可以創建索引以涵蓋k1,k2,k3的所有組合。 – Teevus