代码之家  ›  专栏  ›  技术社区  ›  Ben

为什么这个查询使用where而不是index?

  •  4
  • Ben  · 技术社区  · 14 年前
    EXPLAIN EXTENDED SELECT  `board` . * 
    FROM  `board` 
    WHERE  `board`.`category_id` =  '5'
    AND  `board`.`board_id` =  '0'
    AND  `board`.`display` =  '1'
    ORDER BY  `board`.`order` ASC
    

    上述查询的输出是

    id  select_type table   type    possible_keys   key key_len ref rows    filtered    Extra
    1   SIMPLE  board   ref category_id_2   category_id_2   9   const,const,const   4   100.00  Using where
    

    我对此有点困惑,因为我有一个索引,其中包含我正在使用的列,它们的顺序与查询中使用的顺序相同…:

    category_id_2   BTREE   No  No 
    category_id 33  A       
        board_id    33  A   
        display 33  A   
        order   66  A   
    
    3 回复  |  直到 14 年前
        1
  •  4
  •   Quassnoi    14 年前

    的输出 EXPLAIN

    例如, filesort using where 并不意味着你在使用 WHERE 条款,和 using index

    Using where 只是说桌上有限制条款( 哪里 ON ),并不是所有记录都将返回。请注意 LIMIT

    Using index

    因为你在选择 * ,这是不可能的。除 category_id board_id , display order

        2
  •  0
  •   AndreKR    14 年前

    category_id_2 .

        3
  •  0
  •   MartinodF    14 年前

    category_id_2 key 领域 EXPLAIN .

    Using where WHERE