是否有可能暂时禁用Postgres中的索引?

quo*_*tor 40 postgresql debugging indexing performance

我在一张桌子上有一个我想暂时禁用的索引,但我找不到任何文件表明这是可能的.

原因:我有一个索引,可能会导致与其设计加速的任何查询无关的查询出现问题.这是一个新的索引,整个系统自推出以来似乎较慢.我只是希望能够可靠地消除它作为罪魁祸首,这似乎是最简单的方法,其他解决方案建议,以及更好的问题建议,也是受欢迎的.

ara*_*nid 61

您可以戳系统目录以禁用索引:

update pg_index set indisvalid = false where indexrelid = 'test_pkey'::regclass
Run Code Online (Sandbox Code Playgroud)

这意味着索引不会用于查询,但仍会更新.它是用于并发索引构建的标志之一.请注意,我只是做了一个快速测试,看看索引是否似乎仍然更新,请注意.

  • @schmichael我想如果你将`indisready`设置为false,那将禁用更新:http://www.postgresql.org/docs/current/static/catalog-pg-index.html (6认同)
  • 在RDS上不起作用?错误:关系pg_index的权限被拒绝 (4认同)

Set*_*son 28

begin;
drop index foo_ndx;
explain analyze select * from foo;
rollback;
Run Code Online (Sandbox Code Playgroud)

我不认为有一种方法可以禁用一个,虽然你可以在一个事务中执行此操作,以便从中恢复简单.您还可以禁用indexscan以禁用所有索引.

此外,请确保您正在进行explain analyze查询.

  • 我读过[这将在`foo_ndx`上获得`ACCESS EXCLUSIVE`锁](http://stackoverflow.com/a/4693068/296829),这对其他并发查询有何影响?他们会使用、不使用索引,还是会阻塞直到该事务完成? (4认同)
  • 谢谢。不幸的是,我的问题是,我不知道哪些查询正在变慢:我安装索引的所有内容都超级敏捷,只是整个系统被破坏了。因此,我需要全局禁用索引几分钟,而不仅仅是在一个事务内。 (3认同)