如果我運行以下查詢,每個人都會快速返回(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