我有一個與from_uid
和to_uid
(都索引)的鏈接表,我想過濾掉某些ID。所以,我做的:?MySQL緩慢雙加入
SELECT l.uid
FROM Link l
JOIN filter_ids t1 ON l.from_uid = t1.id
JOIN filter_ids t2 ON l.to_uid = t2.id
現在,由於某種原因,這是出乎意料的慢:(而每個單獨的連接是非常快的,不能使用索引權
EXPLAIN
告訴我:
id select table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 index Null PRIMARY 34 Null 12205 Using index
1 SIMPLE l ref from_uid,to_uid from_uid 96 func 6 Using where
1 SIMPLE t2 index Null PRIMARY 34 Null 12205 Using where; Using index; Using join buffer
我不是專家,但我可以告訴擁有該表的人。技術上是否有辦法強制mysql在不修改表的情況下正確/更快地執行該操作? – Gerenuk 2012-01-19 09:35:32
@Gerenuk,實際上,你應該將數據庫調整到你的查詢而不是查詢數據庫。如果查詢不是那麼重要,那麼您應該接受它可能效率低下。 – newtover 2012-01-19 09:53:37
那麼,正如我所說的,實際上我不能通過will修改鏈接表。問題是如果可以在一個查詢中執行,因爲分割查詢非常快。順便說一句,你的建議索引使查詢甚至更慢...... :( – Gerenuk 2012-01-19 10:30:19