1. 首页
  2. 编程语言
  3. 其他
  4. PostgreSQL 对IN,EXISTS,ANY/ALL,JOIN的sql优化方案

PostgreSQL 对IN,EXISTS,ANY/ALL,JOIN的sql优化方案

上传者: 2021-08-19 21:15:03上传 PDF文件 119.97 KB 热度 24次

而IN和ANY子句需要使用子查询。然而,PostgreSQL已经智能的足以对上面四种写法产生相同的执行计划!如果我们考虑排除情况,事情会变得不同。他们是各自独立的。而NOT EXISTS和LEFT JOIN生成了相同的执行计划。这些hash连接是完成查询要求的最灵活的方式。这也是推荐exists或join的原因。PostgreSQL做了出色的优化,PostgreSQL将子查询计划进行了hash处理。子查询返回的行很少,但即使子查询返回几百行,也会发生同样的情况。代价评估变成了15195038853.01。这样就会严重影响性能。将IN子句转换成了ANY子句,没有对gen列进行类型转换。而是将M\F转成了bpchar总结简单来说,exists和直接join表通常比较好。在一些特殊场景下,IN可以获得更好的执行计划。

下载地址
用户评论