【发布时间】:2014-10-31 02:42:59
【问题描述】:
我创建了一个有 43kk 行的表,用值 1..200 填充它们。因此,表格中每个数字大约 220k。
create table foo (id integer primary key, val bigint);
insert into foo
select i, random() * 200 from generate_series(1, 43000000) as i;
create index val_index on foo(val);
vacuum analyze foo;
explain analyze select id from foo where val = 55;
结果: http://explain.depesz.com/s/fdsm
我希望总运行时间
如果我使用仅索引扫描,它的工作速度非常快:
explain analyze select val from foo where val = 55;
http://explain.depesz.com/s/7hm
但我需要选择 id 而不是 val 所以仅 Incex 扫描不适合我的情况。
提前致谢!
附加信息:
SELECT relname, relpages, reltuples::numeric, pg_size_pretty(pg_table_size(oid))
FROM pg_class WHERE oid='foo'::regclass;
结果:
"foo";236758;43800000;"1850 MB"
配置:
"cpu_index_tuple_cost";"0.005";""
"cpu_operator_cost";"0.0025";""
"cpu_tuple_cost";"0.01";""
"effective_cache_size";"16384";"8kB"
"max_connections";"100";""
"max_stack_depth";"2048";"kB"
"random_page_cost";"4";""
"seq_page_cost";"1";""
"shared_buffers";"16384";"8kB"
"temp_buffers";"1024";"8kB"
"work_mem";"204800";"kB"
【问题讨论】:
-
您能否在问题中包含此查询的输出:
SELECT relname,relpages,reltuples::numeric,pg_size_pretty(pg_table_size(oid)) FROM pg_class WHERE oid='foo'::regclass; -
请为您的两个查询执行
EXPLAIN (analyze, buffers)。并包含此查询的输出:SELECT name,setting,unit FROM pg_settings WHERE source NOT IN ('default','override') UNION ALL SELECT 'version',version(),NULL; -
从您提供的查询中添加了配置并更新了解释链接(现在包含缓冲区信息)
标签: sql performance postgresql