如何创建性能良好且返回10k记录的查询

时间:2013-01-24 20:18:59

标签: sql database postgresql postgresql-9.1

我有以下查询:

EXPLAIN ANALYZE SELECT "google_contacts".* 
FROM "google_contacts" 
WHERE "google_contacts"."user_id" = 1201

此查询最终花费了大量时间,结果如下:

Seq Scan on google_contacts  (cost=0.00..394.99 rows=9999 width=183)
    (actual time=0.008..2.038 rows=9999 loops=1)
      Filter: (user_id = 1201)
Total runtime: 2.552 ms

这个表只有10列,并且在user_id上有一个索引...有关为什么这么长时间运行的任何想法?感谢

2 个答案:

答案 0 :(得分:1)

我在这里遗漏了什么吗?看起来好像查询需要大约2.5ms才能运行。我不认为这是“很多时间”。

有趣的是,查询优化器已经选择不在user_id上使用你的索引(因为解释提到了执行seq扫描而不是索引扫描),但我的理解是它将选择它(优化器)的任何方法认为最有效率的运行,并且你可以做很多事情。

答案 1 :(得分:0)

如果查询返回太多行,则序列扫描将比使用索引更有效。在这种情况下,您可以使用其他方法提高性能。另一方面,瓶颈可以是网络连接。