为什么Mysql不在索引列的INNER JOIN表上使用索引?

时间:2013-02-22 21:40:03

标签: mysql join database-performance

首先,我有以下表结构。

Table Document
     ## DocID ## ##DocName ##
         1          Doc1
         2          Doc2
         3          Doc3 
Table FolderTree
     ## FolderID ##  ## MemberDocID ##
          1                1
          1                2
          1                3

我有DocID,FolderID和MemberDocID

的索引

我有以下查询。

 SELECT DISTINCT d.* FROM Document d inner join FolderTree f on (d.DocID = f.MemberDocID ) where f.FolderID = 1

解释输出:

| select type | table | type | possible_keys | key       | rows    |   extra         |

   simple        d     All     PRIMARY        NULL          83168    Using temporary
   simple        f     ref     MemberDocID    MemberDocID   11       Using index

我的问题是,为什么mysql在表d上使用表扫描,我在DocID上有索引?

先谢谢了。

1 个答案:

答案 0 :(得分:2)

这是因为您在Document表中的所有列上选择了DISTINCT。 DocName上没有索引,因此无法优化搜索不同的值。