如果我运行以下查询,每个人都会快速返回(0.01秒),并为我提供所需的结果。使用IN谓词的MySQL性能
SELECT tagId FROM tag WHERE name='programming'
SELECT COUNT(DISTINCT workcode) FROM worktag WHERE tagId=123 OR tagId=124
(假设这两个标签识别数字是从第一个查询的结果)
我想,所以我只需要一次运行这些查询结合:
SELECT COUNT(DISTINCT workcode) FROM worktag WHERE tagId IN (SELECT tagId FROM tag WHERE name='programming')
然而,这个查询在大约1分钟和20分钟内完成秒。我有索引worktag.workcode
,worktag.tagId
,tag.tagId
和tag.name
。
如果我在查询上运行DESCRIBE
,前两个使用索引,第二个使用子查询的索引(在tag
表上),但不使用worktag
表上的任何索引。
有谁知道这可能是为什么?
注意:worktag
表中有超过1800万条记录。
仅供参考:MySQL中的IN vs范围:http://explainextended.com/2009/10/07/in-list-vs-range-condition-mysql/ – 2009-10-09 21:03:15