Postgresql

使用 Posgres 搜尋超過 500 萬條記錄

  • March 9, 2021

為目前正在使用 Spring Boot 和 Postgres 開發的項目實施搜尋。

搜尋表至少有 8 列,所有列都用於搜尋過濾。為此,需要創建多少個索引?需要創建什麼類型的索引?

表中至少有 1M 條記錄。Postgres 是否有更好的索引?還是需要選擇任何其他 NoSQL,例如 Elastic Search?

請分享您對此的想法和經驗。

已編輯

在此處輸入圖像描述

請參閱上面的螢幕截圖以了解我的搜尋模擬設計。每列的所有組合都將用於過濾。如果是這樣,8 次方 8 將是 40320。那麼我需要創建 40320 索引嗎?僅供參考:我還有一些類似的搜尋。由於我有很多列,所以我想會創建更多索引,這不是正確的做法。在這種情況下,Elastic Search是更好的選擇或Postgres本身服務的目的

當你需要 5M 中的 1M 記錄時,沒有索引是有用的,最好掃描全表。

在談到數據量時,NoSQLElasticSearch都不是比任何其他現代關係數據庫系統(如PostgreSQL )更高性能的數據庫系統。****當您擁有或缺乏動態架構時, NoSQL是一種選擇,而ElasticSearch可用於標記大量文本以使其更易於搜尋,這很可能與您的案例相關。

不幸的是,您的文章有點不清楚,無法提供具體答案,因為我們需要更多詳細資訊,例如您的表格架構、您預期將執行的一些範例搜尋查詢以及您計劃儲存在表格中的一些範例數據並將由這些查詢返回。

正如其他人所指出的,如果您的表只有 100 萬條記錄、5 條記錄,甚至 1 億條記錄,那麼適當的結構化和索引將為您提供 PostgreSQL 上的性能,沒問題。但是如果沒有我上面提到的細節,我們不能推薦您需要哪種結構和索引,最優化。例如,只有 3 列的表至少有 11 種可能的不同索引定義組合可以創建(因為定義中的欄位順序很重要)。但在 3 列的表上儲存 11 個索引是不切實際的,並且可能會對性能產生負面影響,相反,根據對錶執行的查詢來定義索引很重要。索引定義取決於執行的查詢,而不是表本身存在的列。

引用自:https://dba.stackexchange.com/questions/286651