MySQL 查询 - 更好的性能和更具体的 JOIN?

标签 mysql performance join

我正在编写一个 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/

相关文章:

php - 在一个 SQL 查询 (JOIN) 中获取一个普通表并从另一个表计数

mysql - $sql ="SELECT * FROM glasanje where ime=''

php - 回显更新值而不是旧值

PHP/MySQL : Group items by month

c# - ReceiveAsync 与 BeginReceive 的性能

php - 从三个表中进行 SQL SELECT,并在投票系统中进行排序

sql - 在 Postgres 中加入同一张表的不止一种路径

PHP/Ajax DataGrid 永远不会显示在真实网络服务器的页面上,仅显示本地主机 :(

javascript - 使用 img 标签创建文本节点的子字符串时防止下载图像

performance - xamarin 表单动态添加自定义字体标签到 ScrollView 非常慢