当前位置: 首页 > 面试题库 >

为什么Postgres不使用索引?

楚宏胜
2023-03-14
问题内容

我有一张表,其中有一个名为的整数列account_id。我在该列上有一个索引。

但是似乎Postgres不想使用我的索引:

EXPLAIN ANALYZE SELECT "invoices".* FROM "invoices" WHERE "invoices"."account_id" = 1;

 Seq Scan on invoices  (cost=0.00..6504.61 rows=117654 width=186) (actual time=0.021..33.943 rows=118027 loops=1)
   Filter: (account_id = 1)
   Rows Removed by Filter: 51462
 Total runtime: 39.917 ms
(4 rows)

知道为什么会这样吗?


问题答案:

因为:

Seq Scan on invoices  (...) (actual ... rows=118027 <鈥� this
   Filter: (account_id = 1)
   Rows Removed by Filter: 51462                    <鈥� vs this
 Total runtime: 39.917 ms

您选择的行太多了,以至于读取整个表都比较便宜。



 类似资料:
  • 问题内容: 我有2张表,如下所示: 当我解释查询时: postgres给我这个: 过了一会儿给我这个完全相同的查询(仍然不使用索引): 我的问题是:如果我仅按构成唯一索引的st值和类型值进行过滤,为什么不使用此唯一索引? 问题答案: 您的表没有足够的行来使用索引。它们适合放在单个磁盘页面中,因此使用cpu时间读取整个内容并筛选出行要比两次执行同​​一操作(一次用于索引,另一次用于数据)要快。

  • 问题内容: 进行测试后 ,试听得到的最佳结果是什么,试听得到了相同的结果,但用的时间更少: 它具有较低的性能,并且是其他DB中所没有的功能,例如,不使用它的另一个原因。 做另一个可以同时满足两个条件的测试,它有一点优势,那就是它的使用,更多的应用呢? 编辑: 就像@hvd所说的那样,它是的一部分,而的结果并不相同。 问题答案: 首先,它很方便。其次,您需要对大量数据进行测试。一秒钟之内,数据库服务

  • 根据我在pg_hba.conf中读到的内容,我推断,为了确保我被提示输入postgres用户的密码,我应该将pg_hba.conf的前两个条目方法从当前的“对等”编辑为“密码”或“md5”,但如果这是错误的,我不想破坏东西。我的方向是正确的吗?还是遗漏了一些明显的东西? 无论如何,更多细节- 在debian上安装了postgres 9.4之后,我通过这样做更改了postg雷斯用户的密码- …并输入

  • 问题内容: 我有一个表,其中列上有部分索引。 如果我执行简单查询,则使用索引: 但是如果我使用它进行查询,则不会使用索引: 为什么在第二种情况下不使用索引?有什么办法可以加快这个查询? (请注意,在此示例中,我已截断了数组,并测试了更多元素,但结果却相同,缓慢) 问题答案: 实际上,它 正在 使用索引。只是做不同的事情。 索引扫描一行一行地访问,以随机顺序从一个磁盘页面到下一个磁盘页面来回移动。

  • 问题内容: 我有一个查询,在我认为可能不使用索引的情况下,出于好奇,我将其重现: 创建一个具有1.000.000行(在中有10个不同的值,在中有500个字节的数据)的。 创建一个索引并收集表统计信息: 尝试获取和的不同值: 不使用索引,前提是提示不会更改。 我想在这种情况下不能使用索引,但是为什么呢? 问题答案: 我运行了Peter的原始内容并复制了他的结果。然后我应用了dcp的建议… 之所以如此

  • 问题内容: 我是全文搜索的新手,我使用以下查询 学生表包含数百万条随机记录,看起来像这样的“ QZAQHIEK VABCNLRM KFFZJYUU” 仅用了2秒,就产生了1100行。 如果在两秒钟内搜索了百万条记录,为什么我还要使用全文搜索呢? Like谓词是否也使用了全文索引? 问题答案: 我认为您已经回答了自己的问题,至少感到满意。如果您的原型制作在可接受的时间内产生了结果,并且您确信高速缓存