我有一個示例查詢,如:什麼類型的索引是理想的這個查詢?
SELECT
rest.name, rest.shortname
FROM
restaurant AS rest
INNER JOIN specials ON rest.id=specials.restaurantid
WHERE
specials.dateend >= CURDATE()
AND
rest.state='VIC'
AND
rest.status = 1
AND
specials.status = 1
ORDER BY
rest.name ASC;
只是想知道以下兩個指標,這將是最好的餐桌?
id,state,status,name
state,status,name
只是不確定在連接中使用的列是否應該包含在內?
雖然有趣,但我已經創建了兩種類型的測試,並且兩次MySQL選擇主要索引,這只是id
。這是爲什麼?
explain輸出:
1,'SIMPLE','specials','index','NewIndex1\,NewIndex2\,NewIndex3\,NewIndex4','NewIndex4','11',\N,82,'Using where; Using index; Using temporary; Using filesort',
1,'SIMPLE','rest','eq_ref','PRIMARY\,search\,status\,state\,NewIndex1\,NewIndex2\,id-suburb\,NewIndex3\,id-status-name','PRIMARY','4','db_name.specials.restaurantid',1,'Using where'
目前不許多行或許這就是爲什麼它的選擇PRIMARY!?
您可以隨時使用'EXPLAIN'獲取有關如何執行選擇查詢的信息。 http://dev.mysql.com/doc/refman/5.0/en/using-explain.html –
Cyclonecode
我做過了,這就是我發現它使用'PRIMARY'索引,它只包含'id'列。 – Brett
您是否可以發佈完整的說明輸出和MySQL版本? –