首先,我有以下表结构。
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 用于保持记录的唯一性,即没有文档将被检索两次。
此查询工作正常,但在大量记录中它变得更慢。这是解释输出。
| 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 上的索引。我的问题是,为什么会这样?有人可以在这件事上启发我。我正在使用 Mysql 5.x 谢谢 :)