为什么oracle和postgresql之间的速度不同?

时间:2016-07-12 01:34:16

标签: oracle postgresql

在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中进行第二次查询吗? 为什么第二个查询太慢?

请帮帮我......

1 个答案:

答案 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,查询将不返回任何内容。

祝你好运。