sql - LEFT JOIN 子查询表参数是否被多次评估?

标签 sql mysql

我有一个如下所示的查询:

SELECT  *
FROM    employees e
LEFT JOIN
        (
        SELECT  *
        FROM    timereports
        WHERE   date = '2009-05-04'
        ) t
ON      e.id = t.employee_id

如您所见,我的 LEFT JOIN 第二个表参数是由子查询生成的。

数据库是只评估这个子查询一次还是多次?

谢谢。 马蒂

最佳答案

这取决于 RDBMS

在大多数情况下,将采用HASH OUTER JOIN,在这种情况下子查询将被评估一次。

另一方面,

MySQL 无法创建 HASH JOIN,这就是为什么它很可能会将谓词插入子查询并发出这个查询:

SELECT  *
FROM    timereports t
WHERE   t.employee_id = e.id
        AND date = '2009-05-04'

在嵌套循环中。如果您在 timereports (employee_id, date) 上有索引,这也会很有效。

关于sql - LEFT JOIN 子查询表参数是否被多次评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852007/

相关文章:

sql - 不包含带有 ParameterName 的 SqlParameter?

sql - R 连接到本地 SQL Server

php - 解析错误:语法错误,第48行/home/a4673434/public_html/index.php中的意外$ end

php - 执行包含另一个位置的另一个 PHP 脚本的路径的 PHP 脚本

mysql - Doctrine 2 : is multiple level STI possible?

php - 如何使用数据库中存在的文件进行压缩下载?

MYSQL 从当前年份、当前月份和星期几中获取日期

sql - 小复杂的sql

mysql - 在 SQL 中组合常用值

mysql - 什么时候应该将数据库表拆分为两个单独的表?