2010-08-17 61 views
1

一個簡單的問題。我有一個這樣的結構簡單的表格:MySQL:對於ORDER BY調用(不同的字段),我是否爲每個字段創建一個索引?

USERS_TABLE = {id}, name, number_field_1, number_field_2, number_field_3, number_field_4, number_field_5 

排序是一個主要特點,在這一刻的一個領域。表格可以有多達5000萬條記錄。大多數選擇是使用「id」字段完成的,該字段是主鍵,並且已被索引。

示例查詢:

SELECT * FROM USERS_TABLE WHERE id=10 ORDER BY number_field_1 DESC LIMIT 100; 

問題:

難道我創建的每個單獨的索引「number_field_ *」來優化ORDER BY語句,或者是有沒有更好的方式來優化?謝謝

回答

1

這裏沒有銀彈,你將不得不測試你的數據和你的查詢。

如果您的所有查詢(例如WHERE id = 10)都返回少量行,則可能不值得按列索引訂單。另一方面,如果他們返回很多行,這可能會有很大的幫助。

如果您總是按照至少一個字段進行排序,請考慮在該列上創建索引,或在其中某些列上創建複合索引 - 請記住,如果(num_field_1,num_field_2)上有複合索引並且你只能通過num_field_2命令,該索引不會被使用。您必須包含索引的最左邊的字段才能使用它。

另一方面,你似乎有很多不同的領域你排序,創建一個索引在每一個索引上的缺點是你的索引會大得多,而你的插入/刪除/更新可能會開始變慢。

基本上 - 沒有捷徑。您必須充分利用哪些索引最適合您的查詢和相應調整,同時仔細分析您的查詢與EXPLAIN

+0

感謝您的答案。我不確定排序返回的50k記錄是否很重要。我想了很多。我一定會使用EXPLAIN功能來檢查。 – Amer 2010-08-17 21:11:34

+0

50k可能會算很多。 – nos 2010-08-17 21:25:58

相關問題