實施例的數據集:優化一個SQL查詢標籤匹配
id | tag
---|------
1 | car
1 | bike
2 | boat
2 | bike
3 | plane
3 | car
id
和tag
都編入索引。
我想獲得與標籤[汽車,自行車]相匹配的標識(標籤數量可以不同)。
一個天真的查詢,這樣做將是:
SELECT id
FROM test
WHERE tag = 'car'
OR tag = 'bike'
GROUP BY id
HAVING COUNT(*) = 2
但是,這樣做是因爲該集團與事實相符一個標籤,任何線被考慮到該組的效率非常低(和我有一個大容量)。
是否有更有效的查詢這種情況?
我看到的唯一的解決辦法是有一個包含像另一個表:
但這不是實現和維護最新的一個簡單的解決方案。
其他相關信息:
- 名稱匹配必須是精確的(沒有全文索引)
- 標籤的數量並不總是2
你的問題很好的介紹。與[SQLFiddle](http://sqlfiddle.com)例如它將是完美的:) –
我會開始規範化你的標籤。你應該有一個ID和名稱的標籤表。那麼你上面的數據集就是id,TagID – Tobsey
,所以在這種情況下,結果是汽車和自行車,因爲它們都有兩行的名字? – Diego