pgsql隐式联查的笛卡尔积和子查询性能

语句:

1、select a.* from table_a a,table_b b where b.id in (‘1’,‘2’,‘3’) and a.con =b.con
2、select a.* from table_a where a.con in (select con from id in (‘1’,‘2’,‘3’))

条件:

1、table_a表的con字段是索引,table_b的id字段是索引
2、table_b 数据量千以下

性能:

第一个查询:使用了笛卡尔积和WHERE子句来过滤结果。这种方法在数据量较大时可能会导致效率问题,因为笛卡尔积会产生大量的中间结果集,然后再通过WHERE子句中的条件来过滤。即使两个表的con字段和id字段都是索引,由于笛卡尔积的产生,索引的优势可能会被抵消。
第二个查询:使用了子查询来先从table_b中筛选出符合条件的con值,然后再基于这些值去查询table_a。这种方法可以避免产生大型的中间结果集,因为它首先减少了需要从table_a中检索的数据量。如果table_a是小表,那么这种策略尤其有效,因为它可以快速地从table_a中定位到所需的记录。

你可能感兴趣的:(数据库)