Tho*_*ley 7 mysql performance join
我正在编写一个脚本,该脚本基于使用连接在一起的多个表的查询生成报告.脚本的其中一个输入将是报告所需的字段列表.根据请求的字段,可能不需要某些表.我的问题是:如果在SELECT或WHERE子句中没有引用连接,是否存在[重要]性能损失?
请考虑以下表格:
mysql> SELECT * FROM `Books`;
+----------------------+----------+
| title | authorId |
+----------------------+----------+
| Animal Farm | 3 |
| Brave New World | 2 |
| Fahrenheit 451 | 1 |
| Nineteen Eighty-Four | 3 |
+----------------------+----------+
mysql> SELECT * FROM `Authors`;
+----+----------+-----------+
| id | lastName | firstName |
+----+----------+-----------+
| 1 | Bradbury | Ray |
| 2 | Huxley | Aldous |
| 3 | Orwell | George |
+----+----------+-----------+
Run Code Online (Sandbox Code Playgroud)
是否
SELECT
`Authors`.`lastName`
FROM
`Authors`
WHERE
`Authors`.`id` = 1
Run Code Online (Sandbox Code Playgroud)
增持:
SELECT
`Authors`.`lastName`
FROM
`Authors`
JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`
WHERE
`Authors`.`id` = 1
Run Code Online (Sandbox Code Playgroud)
?
在我看来,MySQL应该知道完全忽略JOIN,因为SELECT或WHERE子句中没有引用该表.但不知何故,我怀疑是这种情况.当然,这是一个非常基本的例子.涉及的实际数据将更加复杂.
实际上,这不是一个非常大的交易...我只需要知道我的脚本是否需要对连接"智能",并且只有在请求的字段依赖它们时才包含它们.
这实际上并没有被使用,因为它意味着只有图书中存在的作者才会包含在结果集中。
JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`
Run Code Online (Sandbox Code Playgroud)
但是,如果您“知道”每个作者都存在于 Book 中,那么删除联接会带来一些性能优势,但这在很大程度上取决于索引、表中的记录数以及联接中的逻辑(尤其是在进行数据转换时) )
| 归档时间: |
|
| 查看次数: |
693 次 |
| 最近记录: |