我有一個有3列的表格:
該表包含7.4M條記錄。 我已經為時間創建了一個簡單的索引,為set_id創建了一個索引。 我想運行下面的查詢:
select * from test_prices where time BETWEEN '2015-06-05 00。 00:00 00' and '2020-06-05 00:00 00'。
在我的索引中,查詢需要2分30秒。。
請看解釋analze統計。
我在這里錯過了什么?
uj5u.com熱心網友回復:
根據你的解釋計劃,該行在450萬行中回傳160萬行。 這意味著有相當一部分行被回傳了。
Postgres明智地決定,全表掃描比使用索引更有效,因為很有可能無論如何都需要讀取所有的資料頁。
令人驚訝的是,你報告的查詢時間是 00:02:30。 解釋說查詢在大約 1.4 秒內完成,這似乎是合理的。
我懷疑耗費的時間是由被回傳的資料量(可能行數非常多)、與資料庫的緩慢網路連接或資料庫/服務器上的爭用造成的。
uj5u.com熱心網友回復:
你的查詢選擇了三分之二的表。順序掃描是處理這種查詢的最有效方式。
你的查詢在 2 秒內執行。一定是你的客戶端在呈現查詢結果時花了很長時間(pgAdmin在這方面是臭名昭著的)。使用一個不同的客戶端。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332023.html
標籤:
