Laurenz Albe:PostgreSQL中的子查询与性能
原文英文,约1500词,阅读约需6分钟。发表于: 。© Laurenz Albe 2023 SQL allows you to use subqueries almost anywhere where you could have a table or column name. All you have to do is surround the query with parentheses, like (SELECT ...),...
SQL允许在几乎任何地方使用子查询,分为相关和无关子查询。标量子查询和表格子查询分别返回单个值和多个值。相关标量子查询影响性能,建议转换为连接操作。表格子查询的性能复杂,可通过重写查询来避免相关子查询。PostgreSQL优化器能够转换EXISTS和NOT EXISTS子查询为连接策略。IN和NOT IN子查询可重写为NOT EXISTS,但需注意语义差异。有时需使用相关子查询来强制使用嵌套循环连接。准则:使用无关子查询,避免相关子查询,除非在EXISTS、NOT EXISTS和IN子句中,将NOT IN重写为NOT EXISTS。