PostgreSQL查询优化:查询条件优化一(条件分类)
在SQL中,查询条件在查询优化阶段需要被分成三种类型,三类条件有不同的作用,在某些情况下,可以相互转化。 在针对表之间的连接为内连接时,WHERE条件上的各个以AND连接的表达式可以随便地下推到基表作基表的过滤条件或者是连接上作连接条件,但当连接不为内连接时,该下推是不正确的, 参看下面的示例: 表TBL_1 (C1 int,c2 int); 有元组(1,1),(2,2) 表TBL_2 (c1 int,(null,null) 则此时 SELECT * FROM TBL_1 LEFT JOIN TBL_2 ON true WHRER TBL_1.c1 = TBL_2.c2; 它的查询结果为:(1,1,1) 而将WHERE条件下推到连接条件时,即SQL语句为 SELECT * FROM TBL_1 LEFT JOIN TBL_2 ON (TBL_1.c1 = TBL_2.c2) WHRER true; 则它的查询结果为(1,2,null,null)。 它们结果的不同是由于(TBL_1.c1 = TBL_2.c2)作为连接条件时,代表的意义是:对TBL_1中的一条元组,如果能与TBL_2中的任何一条元组使得(TBL_1.c1 = TBL_2.c2)值为TRUE,则将其连接,返回;如果没有,则将TBL_1的元组输出,右端补空。而当这个条件作为连接的过滤条件时,它会将(2,null)过滤掉,因为它不满足该连接的过滤条件。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |