2011-05-26 26 views
29

我在桌上有一個索引,我想暫時禁用,但我找不到任何文檔表明它有可能。是否可以暫時禁用Postgres中的索引?

原因:我有一個索引可能會導致查詢中的問題與其設計用於加速的任何查詢無關。這是一個新的索引,整個系統自推出以來似乎較慢。我只是想能夠可靠地消除它作爲罪魁禍首,這似乎是最簡單的方法,其他解決方案的建議,以及更好的問題建議,也是受歡迎的。

回答

40

可以撥開系統目錄來禁用索引:

update pg_index set indisvalid = false where indexrelid = 'test_pkey'::regclass 

這意味着該索引將不會被用於查詢,但仍會更新。這是用於併發索引構建的標誌之一。請注意,我只做了一個快速測試,看看這個索引是否仍然被更新,並提醒您注意。

+1

是否可以禁用對索引的更新? – schmichael 2012-02-28 17:24:07

+5

@schmichael我認爲如果你將'indisready'設置爲false,那將會禁用更新:http://www.postgresql.org/docs/current/static/catalog-pg-index.html – araqnid 2012-02-28 20:53:28

+1

你還應該考慮有關的限制到:http://serverfault.com/questions/300123/how-to-edit-system-catalogs-in-postgresql-8-1/ – 2014-09-29 12:29:35

21
begin; 
drop index foo_ndx; 
explain analyze select * from foo; 
rollback; 

我不認爲有禁用只有一個辦法,但你可以做到這一點的交易,使從中恢復死的簡單。您還可以禁用索引掃描來禁用所有索引。

此外,請確保您在對您的查詢執行explain analyze

+0

謝謝。不幸的是,我的問題是,我不知道哪些查詢會變慢:我安裝索引的所有內容都超級活潑,只是整個系統崩潰了。所以我需要在幾分鐘內全局禁用索引,而不僅僅是在一個事務中。 – quodlibetor 2011-05-26 23:17:48

+0

給你一個upvote,因爲這是一個查詢的正確方法。如果不是我的問題的愚蠢的普遍性,你會修正它。 – quodlibetor 2011-05-26 23:45:45

+0

建議使用「EXPLAIN ANALYZE」,以便開始瞭解正在發生的事情。然後你可以說,「爲什麼'INDEX'的存在導致'index_scan'從X到Y的時間? – Sean 2011-05-27 23:04:43

相關問題