我有以下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'

08-06 04:48