MySQL资源利用率优化

标签 mysql select query-optimization

有2个查询:

select * from X inner join Y on X.id=Y.id where X.text = "ABC";

select * from X inner join Y on X.id=Y.id and X.text = "ABC";

执行过程中的内存利用率是否有足够的差异,哪个不那么贪婪?请证明你的答案。

最佳答案

在像这样的简单选择中,查询优化器应该将两个查询优化为相同的代码。

哪个查询更贪婪取决于您的索引。

如果 Y.id 上有索引但 X.text 上没有索引,机器人查询将执行相同的操作。

如果 Y.idX.text 上都没有索引,那你就只能走运了。如果 MySQL 正确优化,第一个查询可能会更快,因为它在连接之前应用 where(这将是一个嵌套循环连接)。

如果Y.id 和X.text 都有索引,第一次查询会更快,因为它可以利用两个索引。它将首先应用 where 子句,然后进行索引连接。

基本规则:不要在 JOIN 子句中对前导表 (X) 应用 where 条件。请在连接子句中包含连接表 (Y) 的 where 条件(尤其是在进行左连接时)。

关于MySQL资源利用率优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16148544/

相关文章:

php - 无法将数组从 Php/MySQL 查询传递到 SwiftMailer

C 套接字编程,select() 和 fd_set 的问题

mysql - 表 1 包含名字和姓氏,表 2 包含两列引用表 1 上的名称

sql - Oracle 从 SYSDATE 中减去 5 个工作日

MySQL UNION ALL 性能调优

php - cURL 和 PHP 显示 "1"

php - 转义字符串/在 php 脚本中插入

php - 需要查看日期范围是否与sql中的另一个日期范围重叠

mysql - MySQL 或 PostgreSQL 的汉明距离优化?

mysql - 大型网站的 WordPress 数据库优化