2011-09-20 71 views
0

在一個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=K3Vwhere k2=K2V and K3=K3V因爲K2的任何specifiv值將始終具有相同的K1值。

或者我應該問一下where K3=K3V and K2=K2V and K1=K1Vwhere K3=K3V and K1=K1Vwhere K3=K3V and K2=K2V? (因爲K3列中空字符串值的悔改)。

會是什麼使這個查詢的最佳方法是什麼?我應該爲此創建什麼索引?

會改變它的答案,如果在對K1不同的值,K2的不同值的量的變化被稱爲是大嗎? (即一些K1V的有5個K2V的與之相關聯的,而另一些thousends)

回答

0

聽起來是否有按鍵之間的依賴關係你的表是不歸。我會建議您將表正常化爲第三範式,然後將索引放在外鍵上(至少)。應該添加額外的索引以支持特定的查詢。

+0

我知道它不是標準化的。而K1和K2是其他表格的唯一鍵。但我仍然希望我的Q能夠通過更好地理解索引來回答。我的印象是,在這種情況下有重複的數據可能有助於表演......或者我錯了嗎? – epeleg

+0

您使用哪些DBMS可能會影響答案?我的建議是測量性能,並選擇最適合您最常見場景的性能。確保您的桌面上的統計數據保持最新。一般來說,對於SQL Server來說,最好給查詢優化器提供更多選項來加入數據,並讓它根據可用的索引和統計信息選擇最佳方式。如果空間(和插入/更新性能)較少考慮,則可以創建索引以涵蓋k1,k2,k3的所有組合。 – Teevus