2011-09-07 110 views
1

我有一個包含5列的表,例如 - A(主鍵),B,C,D和E. 此表有近150k行,此表中沒有索引。正如預期的那樣,select查詢非常慢。MySQL DB的最佳索引策略

這些查詢由用戶搜索請求生成,因此他可以在任何字段(B,C,D和E)中輸入值,這些是「IN」種查詢。我不確定這裏有什麼好的索引策略 - 在每個列上都有索引,或者有一些組合。

這些柱子各自的選擇性是相同的(約50)。 任何幫助,將不勝感激。

回答

0

如果你可以在一個索引中分組兩列,那就行了。只要不查詢交叉連接等笛卡爾產品,在每一列上都有索引就沒有那麼糟糕了。但最好不要太..

3

你是否運行相同的查詢,無論用戶給你什麼?在那種情況下,該查詢應該告訴你要使用哪些索引。

例如,如果您的查詢可能看起來像

SELECT * FROM mytable WHERE 
    B IN (...) AND 
    C IN (...) AND 
    D IN (...) AND 
    E IN (...) 

在這種情況下,如果你對所有列限制,所有5列的組合索引可能會是好的。

否則,爲每列創建一個索引,或者將您始終限制在一起的列組合在單獨的索引中。

請記住,如果您的組合索引位於例如B和C,那麼不限制B的查詢將不會使用該組合索引。