im使用框架ORM运行我的查询...这是ORM查询输出的示例...它是一个关系查询
select * from `clients` where exists
(select * from `transactions` where `clients`.`id` = `transactions`.`client_id` )
order by `id` desc limit 20 offset 02
我想知道对子查询施加限制是否会在该查询中提高性能,因为返回多少行无关紧要
喜欢
(select * from `transactions` where `clients`.`id` = `transactions`.`client_id` LIMIT 1 )
在这种情况下,性能是否取决于我们在子查询中选择多少行?
答案 0 :(得分:2)
首先,在没有LIMIT
的情况下使用ORDER BY
毫无意义,因为在建议的子查询中,您没有告诉MySQL 您要保留的单个记录。
接下来,您绝对不要可能要限制存在的子查询,因为那样可能会导致它过早失败,然后才有机会找到匹配项。存在子查询的全部目的是可能扫描整个transactions
表以寻找客户端匹配项。
肯定的EXISTS
子句已经过优化,因为MySQL一旦找到一个匹配项就会立即停止。
答案 1 :(得分:2)
where exists
(select * from `transactions` where `clients`.`id` = `transactions`.`client_id` )
suquery用作EXISTS
条件的参数。用英语来表示,该客户至少有一笔交易。
在处理这种情况时,MySQL通常会优化过程以仅检查子查询是否返回了至少一条记录。在这种情况下使用LIMIT
是没有用的,您的RDBMS知道的更好。