2012-02-28 49 views
3

下面是解釋查詢有問題..如何說服這個MYSQL查詢使用索引?

mysql> EXPLAIN SELECT orders_0.id, orders_0.created_at, orders_0.total_amount, orders_0.delivery_date, orders_0.customer_id, orders_0.items_summary, orders_0.site_id, orders_0.depot_id, orders_0.region_id, addresses_0.country, orders_0.payment_status, orders_0.created_by, orders_0.status, orders_0.delivered_by 
     -> FROM production.addresses addresses_0, production.orders orders_0 
     -> WHERE orders_0.delivery_address_id = addresses_0.id AND ((orders_0.status Not In ('cancelled','checkout','expired')) AND (orders_0.delivery_date>{d '2011-10-31'})); 
    +----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+ 
    | id | select_type | table  | type | possible_keys       | key  | key_len | ref           | rows | Extra  | 
    +----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+ 
    | 1 | SIMPLE  | orders_0 | ALL | status,delivery_date,delivery_address_id | NULL | NULL | NULL           | 929330 | Using where | 
    | 1 | SIMPLE  | addresses_0 | eq_ref | PRIMARY         | PRIMARY | 4  | production.orders_0.delivery_address_id |  1 |    | 
    +----+-------------+-------------+--------+------------------------------------------+---------+---------+-----------------------------------------------+--------+-------------+ 
    2 rows in set (0.00 sec) 

    mysql> 

我有它試圖做到哪裏的條件,但遺憾的是它沒有試圖使用索引合併對三列的索引。是創建多列索引的唯一選擇,還是有一些使用這些索引關閉MYSQL的東西?

+0

您是否嘗試了FORCE/USE INDEX,如此處所述。 http://dev.mysql.com/doc/refman/5.1/en/index-hints.html – user1027167 2012-02-28 14:55:58

+0

對帖子標題爲+1 – perissf 2012-02-28 14:57:05

+0

在3列上創建多列索引,並按照它們在查詢 – Abhay 2012-02-28 15:06:18

回答

1

您必須創建多列索引。

例如,要在Phpmyadmin中執行此操作,您必須檢查表格的這些不同字段,然後單擊表格結構下的「索引」按鈕。