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

私の質問は、DocID にインデックスがあるテーブル d で mysql がテーブル スキャンを使用するのはなぜですか?

4

1 に答える 1

2

これは、Document テーブルのすべての列で DISTINCT を選択しているためです。DocName にはインデックスがないため、個別の値の検索を最適化できません。

于 2013-02-22T21:44:08.023 に答える