我有一个在PostgreSQL中的表:
CREATE TABLE my_table
(
id bigint NOT NULL,
value bigint,
CONSTRAINT my_table_pkey PRIMARY KEY (id)
);
我的表中有大约50000行。
问题是,为什么这个查询语句:
SELECT * FROM my_table WHERE id = COALESCE(null, id) and value = ?
比这个慢:
SELECT * FROM my_table WHERE value = ?
除了在应用层优化查询字符串之外,还有其他解决方案吗?
编辑:实际上,问题是如何重写查询select * from my_table where id=coalesce(?, id) and value=?
,以便在Postgresql 9.0中,最坏情况下的性能不低于select * from my_table where value=?
id = COALESCE(null, id)
的目的是什么?由于id
被定义为NOT NULL
,而id = id
总是返回 true,因此 COALESCE 将始终返回id
。请问需要翻译哪些内容? - Steve Prenticeselect * from my_table where id=coalesce(?, id) and value=?
,虽然有点烦人,但并不完全无用 :) - Tair