我很困惑如何最好地在MySQL中索引表,並且需要使用最佳類型的索引構造方面的幫助。目前,我在此表上使用唯一鍵索引,但不知道這是否是最佳使用方法,並且在某些情況下,由於MySQL限制,我無法使用這種類型的索引。索引MySQL表的最佳查詢的替代方法?
該表由主鍵和n列,在這種情況下,以保持它的簡單N = 4。所以表看起來像這樣:PK,COL1,COL2,COL3,COL4
在COL1-N的值是VARCHAR處理典型地具有1至4個字符之間的長度。主鍵是col值的串聯。這樣典型的行可能看起來像以下:
A:B:C:D, A, B, C, D
A:B:C:E, A, B, C, E
A:B:F:F, A, B, F, F
當第一元件是主鍵,和隨後的元件是COL1,COL2,等等
該表需要對查詢進行優化,而不是插入。我希望執行的查詢將有一個WHERE子句,我們知道1-4列中的一些值。因此,例如,我可能想要查找第二列爲'B'或'C'的所有行。一旦我有主鍵,我用它來加入另一個表。
我創建的col1-4唯一鍵(因爲它們是唯一的)。問題是,只要n變大(> 16),我就不能再創建唯一的鍵索引(對於唯一的鍵約束,MySQL被限制爲16列)。這不是問題,因爲主鍵確保唯一性。不過,我不確定的兩件事情:
a)是爲了優化查詢的速度使用的唯一鍵的良好指標?
b)如果我不能使用一個唯一的密鑰,我應該用什麼指標?
我有以下的選項,我不知道它(如果有的話)是最好的:
a)創建於(COL1,COL2,COL3,COL4)
B A單一指數)創建一個索引每列(col1),(col2)...(col-n)
c)創建一個索引每列,包含pk(pk,col1),(pk,col2),(pk, col-n)
任何幫助你可以提供非常感謝。
由於
菲爾
我總是建議使用一個整數作爲你的PK。爲什麼不添加一個ID列? – Fr0zenFyr
在生產環境中,主要使用AI(自動遞增)整數。 – JoDev
@ Fr0zenFyr爲什麼使用任意的ID如果有一個有意義的可用? – Sepster