2

首先,我有以下表结构。

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 在我有 DocID 索引的表 d 上使用表扫描?

4

1 回答 1

2

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

于 2013-02-22T21:44:08.023 回答