我正在编写一个 MySQL 查询,我有一个疑问:这些代码(下面)中哪些代码更快?我认为如果我在“左连接”(第二个代码)中更具体,它应该更快。这种做法是否正确?
SELECT m.*, p.nome AS nomeprocedimento
FROM medicos AS m
LEFT JOIN medicoprocedimento AS mp ON m.id = mp.medicoid
LEFT JOIN procedimentos AS p ON mp.procedimentoid = p.id
WHERE m.id = 123
或
SELECT m.*, p.nome AS nomeprocedimento
FROM medicos AS m
LEFT JOIN medicoprocedimento AS mp ON m.id = mp.medicoid AND mp.medicoid = 123
LEFT JOIN procedimentos AS p ON mp.procedimentoid = p.id
WHERE m.id = 123
最佳答案
如果该字段被索引,通常不会有太大区别,因为查询优化器会看到您正在寻找来自 medicoprocedimento.medicoid
的单个值。 (或 medicos.id
)列。因此,即使您只有 where
中的筛选器,它也会通常在执行连接之前对该值执行索引搜索/扫描。子句,而不是直接在 join
中.
也就是说,在您做出选择之前,您应该始终检查您的执行计划以验证此优化是否已完成。没有什么可以替代运行查询时实际发生的情况。
关于MySQL 查询 - 更好的性能和更具体的 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245718/