在postgresql中
select * from test where text123 = '1'
"Index Scan using ix_test on test (cost=0.57..12619.44 rows=6980 width=343)"
" Index Cond: ((text123)::text = '1'::text)"
select * from test where text123 = ''
"Seq Scan on test (cost=0.00..11918891.20 rows=209355618 width=343)"
" Filter: ((text123)::text = ''::text)"
第一个查询结果立即返回。但第二个不是。
在Oracle中,它与postgresql具有相同的计划,但第二个查询结果立即返回。
我可以在postgresql中进行第二次查询吗? 为什么第二个查询太慢?
请帮帮我......
答案 0 :(得分:2)
第二个查询
select * from test where text123 = ''
在PostgreSQL和Oracle中做了很多不同的事情。
在PostgreSQL中''
表示"一个零长度的字符串"。因此在PostgreSQL中,查询意味着
Return all fields in all rows of table test where the text123 column
is equal to a string which is zero characters long
在Oracle中,''
表示NULL
。因此,在Oracle中,此查询意味着
Return all fields in all rows of table TEST where the TEXT123 column
is equal to NULL
因为没有,甚至不是NULL,永远等于NULL,查询将不返回任何内容。
祝你好运。