まず第一に、私は次のテーブル構造を持っています。
Table Document
## DocID ## ## DocName## ## DuplicateID ##
1 Doc1 null
2 Doc2 null
3 Doc3 null
4 Doc4 1
Table FolderTree
## FolderID ## ## MemberDocID ##
1 1
1 2
1 3
私はインデックスを持っていますDocID, DuplicateID and MemberDocID and FolderID
私の質問はこれです:
SELECT d.*
from Document d, FolderTree f
WHERE (d.DocID = f.MemberDocID or d.DuplicateID = f.MemberDocID) and f.FolderID = 1
GROUP BY d.DocID ;
したがって、基本的には、ID 1のフォルダーからすべてのドキュメントを取得し、テーブルから重複するドキュメントも取得します。group byは、ドキュメントが2回取得されないというレコードの一意性を維持するために使用されます。
このクエリは正常に機能していますが、大量のレコードでは速度が低下しています。これが説明の出力です。
| select type | table | type | possible_keys | key | rows | extra |
simple d range PRIMARY,... PRIMARY 83168 Using temporary..
simple f All DuplicateIDInx Null 108787 Using join buffer
私が懸念しているのは、テーブルfがDuplicateIDのインデックスを使用していないことです。私の質問は、なぜそうなのかということです。誰かがこの問題について私に教えてもらえますか。Mysql5.xを使用していますありがとうございます:)