ANALYZE語句可用於PostgreSQL中收集表的統計數據。然而,我不想將這些數據實際插入到表中,我只需要評估一些查詢的成本,無論如何手動指定PostgreSQL中表的統計數據而不實際將數據放入它中?如何手動更新PostgreSQL中表的統計數據
1
A
回答
2
我覺得你很混亂ANALYZE
與EXPLAIN ANALYZE
。有不同的事情。
如果您想要查詢成本和時間而不應用更改,則唯一的實際選項是開始一個事務,執行EXPLAIN ANALYZE
下的查詢,然後執行ROLLBACK
下的查詢。
這仍然執行查詢,這意味着:
- CPU時間和I/O消耗
- 鎖仍採取和保持時間
- 新行實際上寫的是表和索引,但從未標記爲可見。他們在下一個
VACUUM
清理。
1
即使沒有插入數據,您也可以已經EXPLAIN ANALYZE查詢,它可以幫助您瞭解執行計劃。
但是沒有像真實數據那樣的東西:) 作爲解決方法,您可以做些什麼開始一個事務,插入一些數據,EXPLAIN ANALYZE查詢,然後ROLLBACK您的事務。
實施例:
mydatabase=# BEGIN;
BEGIN
mydatabase=# INSERT INTO auth_message (user_id, message) VALUES (1, 'foobar');
INSERT 0 1
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.007..0.008 rows=1 loops=1)
Total runtime: 0.042 ms
(3 lignes)
mydatabase=# ROLLBACK;
ROLLBACK
mydatabase=# EXPLAIN ANALYSE SELECT count(*) FROM auth_message;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------
Aggregate (cost=24.50..24.51 rows=1 width=0) (actual time=0.011..0.011 rows=1 loops=1)
-> Seq Scan on auth_message (cost=0.00..21.60 rows=1160 width=0) (actual time=0.009..0.009 rows=0 loops=1)
Total runtime: 0.043 ms
(3 lignes)
的第一EXPLAIN ANALYZE表明,有一些 「臨時」 數據(行數= 1)
這不是嚴格意義上的 「模擬」,但至少,PostgreSQL的計劃執行(和它可以做的各種優化)應該是,恕我直言,最好比沒有數據(免責聲明:純粹直觀)
+0
啊......並且在ROLLBACK之後添加VACUUM ANALYZE your_table可能有助於清除用於執行計劃的統計信息中的潛在修改......但我不是PostgreSQL專家,我不確定回滾事務是否也回滾表統計信息。 –
相關問題
- 1. Oracle手動更新所有表上的統計信息
- 2. 如何手動更新儀表板數據與Google表單?
- 3. 如何通過postgresql中的數據順序更新表?
- 4. 當postgresql服務器啓動時,postgresql中是否有系統表自動更新?
- 5. 如何用postgresql統計表中的術語數量?
- 6. 如何統計PostgreSQL中不同表的特定兩列的數據?
- 7. 更新手動數據庫更改
- 8. 如何手動更新MySQL表索引?
- 9. 更新統計信息和表格數
- 10. 根據計數更新表
- 11. 生成PostgreSQL統計/數據分析
- 12. 更新PostgreSQL中的表格
- 13. 如何手動更新ArrayController
- 14. POSTGRESQL函數更新表中的字段
- 15. 如何在PostgreSQL和MySQL中獲取數據庫數據傳輸統計信息?
- 16. 手動更改postgresql中查詢的執行計劃?
- 17. PostgreSQL表更新
- 18. 更新計數器觸發的PostgreSQL
- 19. 如何設計用於數據查詢和數據更新的系統
- 20. 從SQL數據庫自動更新統計信息
- 21. 手動更新Flyway中的schema_version表
- 22. 笨數據庫更新手動
- 23. 如何手動刷新數據綁定?
- 24. 如何動態統計數據庫中的行數?
- 25. 如何統計表中的行數?
- 26. 如何從數據庫中自動獲取系統時間和更新數據
- 27. 如何在angularjs中手動更新$ scope
- 28. 如何在刪除一些以前的數據後重新啓動PostgreSQL中的表的計數?
- 29. 如何在Android中動態創建的表中更新數據?
- 30. 如何統計Excel數據表中的行數?
嗨,謝謝你的回覆。那麼,也許我的陳述有點不清楚,我的意思是我想找到一種方法來手動指定表的統計信息,說表A沒有數據,但我想讓PostgreSQL認爲那裏在該表中有1000行,因此我可以使用模擬統計來評估查詢。 – yingzhox
@ user1780833是的,非常不清楚!在這一點上,考慮發佈一個新的,包括那些相當重要的細節和任何其他相關的背景。 –