我有以下MySQL查询:
SELECT k.strNaam
FROM klant AS k
INNER JOIN project AS p ON p.iKlantID = k.iKlantID
LEFT JOIN klant_factuurregels AS kfr ON kfr.iJobID = p.iProjectID
WHERE p.iFactuurID = '49'
OR kfr.iFactuurID = '49'
该查询的加载时间超过0.5秒,但我在while循环中使用了该查询,因此效率非常低。
提前致谢
使用前面的
EXPLAIN
命令编辑MySQL查询:id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 SIMPLE p ALL iKlantID NULL NULL NULL 18848
1 SIMPLE k eq_ref PRIMARY PRIMARY 8 projecten.p.iKlantID 1
1 SIMPLE kfr ALL NULL NULL NULL NULL 18 Using where
最佳答案
尝试如果这不会更快...由于where子句中的或条件,索引不能用于解析WHERE。但是最糟糕的是,没有使用iKlantID索引来解析联接。
SELECT k.strNaam
FROM klant AS k
INNER JOIN project AS p ON p.iKlantID = k.iKlantID
LEFT JOIN klant_factuurregels AS kfr ON kfr.iJobID = p.iProjectID
WHERE p.iFactuurID = '49'
UNION
SELECT k.strNaam
FROM klant AS k
INNER JOIN project AS p ON p.iKlantID = k.iKlantID
LEFT JOIN klant_factuurregels AS kfr ON kfr.iJobID = p.iProjectID
WHERE kfr.iFactuurID = '49'