PostgreSQL通过电子邮件栏加快搜索速度
我在PostgreSQL数据库中有一个表,有近6000万条记录。表的列email_id定义为PostgreSQL通过电子邮件栏加快搜索速度,sql,postgresql,indexing,query-performance,Sql,Postgresql,Indexing,Query Performance,我在PostgreSQL数据库中有一个表,有近6000万条记录。表的列email_id定义为 character varying(64) 我正试图通过这根柱子优化搜索。例如,查询: select count(1) from my_table where email_id = 'some@email.com'; 完成并返回结果大约需要190秒。我尝试在该列上创建索引,如下所示: CREATE INDEX my_table_idx_email_id ON my_table USING b
character varying(64)
我正试图通过这根柱子优化搜索。例如,查询:
select count(1) from my_table where email_id = 'some@email.com';
完成并返回结果大约需要190秒。我尝试在该列上创建索引,如下所示:
CREATE INDEX my_table_idx_email_id
ON my_table
USING btree
(email_id);
但没有明显的改善,甚至根本没有改善。我还尝试用explain analyze语句分析查询,并确认问题出在电子邮件栏中
explain analyze select count(1) from my_table where email_id = 'test@unknown.email';
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=5211284.25..5211284.26 rows=1 width=0) (actual time=225424.749..225424.749 rows=1 loops=1)
-> Seq Scan on my_table (cost=0.00..5211235.72 rows=19410 width=0) (actual time=225424.744..225424.744 rows=0 loops=1)
Filter: ((email_id)::text = 'test@unknown.email'::text)
Total runtime: 225426.646 ms
解释启用后分析输出\u seqscan=off:
SET enable_seqscan = off;
explain analyze select count(1) from my_table where email_id = 'test@unknown.email';
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------------------------------
Aggregate (cost=10005215244.40..10005215244.41 rows=1 width=0) (actual time=282110.404..282110.405 rows=1 loops=1)
-> Seq Scan on my_table (cost=10000000000.00..10005215195.84 rows=19425 width=0) (actual time=282110.393..282110.393 rows=0 loops=1)
Filter: ((email_id)::text = 'test@unknown.email'::text)
Total runtime: 282113.296 ms
explain analyze的输出是什么?用输出更新了我的问题。通过
设置enable_seqscan=OFF,你有什么计划代码>?在启用顺序扫描后用输出更新。仍然很慢…看起来该表上没有任何可以使用的索引,但是您提供了应该在第二个查询中使用的索引代码。怎么会?