2012-02-28 2 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

+0

+1에 대한 게시물 제목 – perissf

+0

3 열과 함께 사용되는 순서대로 다중 열 인덱스를 만듭니다. 쿼리 – Abhay

답변

1

다중 열 인덱스를 만들어야합니다.

예를 들어, Phpmyadmin에서이를 수행하려면 테이블의 다른 필드를 확인하고 테이블 구조 아래의 '색인'버튼을 클릭해야합니다.