2012-08-15 171 views
0

我一直在研究一個mysql數據庫,並且具有數據庫的最重要的表之一將在900到1000萬條記錄之間。我能夠做這個查詢:如何優化此選擇查詢? (MySQL)

select MAX(SEN_ID) as SEN_ID from senal group by variable_VAR_ID 

但它需要12分鐘。我該如何優化這個查詢?

這個查詢在數據庫很小的時候工作正常,但現在數據庫中有數百萬行,我意識到我應該考慮優化它。

查詢中執行EXPLAIN顯示此:

id select_type table type possible_keys key    key_len ref rows  Extra 
1 SIMPLE  senal index NULL   fk_senal_variable1 4  NULL 6333242 Using index 

回答

1

您需要創建綜合指數variable_VAR_ID + SEN_ID

注1:不是兩個分開的指標,而是一個複合
注2:是的,爲了問題

PS:這裏是如何創建索引的語法描述:http://dev.mysql.com/doc/refman/5.5/en/create-index.html

+1

你能解釋更多嗎,所以你的答案變得更有用,我們學到了一些東西?訂單爲什麼重要?爲什麼是一個複合索引,而不是2個單獨的索引? – Jocelyn 2012-08-15 22:27:35

+1

@Jocelyn該命令很重要,因爲MySQL首先使用組合索引的最左邊的字段。因此,在這種情況下,您希望mysql將variable_var_id限定爲唯一的範圍,然後查看SEN_ID以獲取每個唯一variable_var_id的最大值。看看這篇關於優化查詢的文章。[鏈接](http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm) – patsweet 2012-08-15 22:54:22

+0

因此,幾個小時後我可以做這樣的改變:我創建了兩個索引:'INDEX'SEN_SUPINDX'('SEN_ID' DESC,'SEN_FECH' DESC,'variable_VAR_ID' DESC)'和'INDEX'VAR_ID''('variable_VAR_ID' DESC)''但我不知道如何正確使用它。 – user1601753 2012-08-16 14:54:52