Postgresql

Postgres 排序優化

  • February 3, 2018

我正在尋找一種在插入而不是獲取期間對錶條目進行排序的方法。如果這是不可能的,有沒有辦法讓主鍵自動遞增?(即如果id是主要的,ai將從 0 開始為每個不同的id插入遞增)

例子:

id | ai
---+---
0 | 0
0 | 1
0 | 2
1 | 0
1 | 1
1 | 2
1 | 3

簡短的回答:不,是,分別。

SQL 數據庫確實以某種順序儲存數據。無論是通過分配,還是(當表上有聚集索引時)通過聚集鍵。

但是,執行查詢的過程並不能保證數據將按照儲存的順序返回。為了保證數據的順序,您必須ORDER BY在語句中使用該子句SELECT

是的,您可以在 PostgreSQL 中創建一個自動遞增的 ID 值。雖然這通常用於創建用作主鍵的代理鍵,但如果您願意,它似乎僅可用於創建唯一列。

這個問題的公認答案應該給你你需要的東西。您要麼使用序列,要麼使用SERIAL偽數據類型(在幕後為您創建序列)。檢查您的版本的文件以獲取有關序列的更多詳細資訊。

(我相信SERIAL很可能從 1 開始,而不是 0 - 您可能必須自己設置序列才能獲得特定的起點)

注意:此答案適用於 PostgreSQL 的標記版本 9.4。從版本 10 開始,根據 SQL:2003 和 SQL:2008 標準(功能 #T174),PostgreSQL 現在具有類似於 Oracle 或 DB2 中的標識列機制。請參閱GENERATED ... FOR IDENTITY 此處的文件。

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