我可以使用ROWID代替SQLite表中的時間戳嗎?SQLite:使用ROWID代替時間戳
我需要得到50個SQLite表中的最新項目,我正在考慮使用一個單獨的時間戳字段,但後來我想到一個更大的ROWID意味着一個新的項目,並且ROWID已經存在,不需要改變模式。
我可以使用ROWID代替SQLite表中的時間戳嗎?SQLite:使用ROWID代替時間戳
我需要得到50個SQLite表中的最新項目,我正在考慮使用一個單獨的時間戳字段,但後來我想到一個更大的ROWID意味着一個新的項目,並且ROWID已經存在,不需要改變模式。
那麼,as it says here(與我的強調):
爲ROWID表中的數據被存儲爲包含用於每個錶行 一個條目B樹結構,採用ROWID值作爲密鑰。這 意味着檢索或排序記錄rowid是快速。搜索 以獲得具有特定rowid的記錄,或者在指定範圍內具有rowid 的所有記錄大約是的兩倍作爲類似搜索 通過指定任何其他PRIMARY KEY或索引值。
然而,它也表示:
ROWID值可以使用以相同的方式 UPDATE語句的任何其他列值可以被修改,或者使用中的一個內置的 別名( 「rowid」,「oid」或「rowid」)或通過使用由 創建的別名整數主鍵。
它肯定會更快,但它有點傷害我對「開放」設計的感覺,因爲你依賴於實現的功能而不是特定的功能。
話雖如此,相同的鏈接也這樣說:
有一個例外注意以下,如果一個rowid表有一個由一列和聲明的類型的列 的主鍵 是大寫和小寫混合的「INTEGER」,那麼列 將成爲rowid的別名。這樣的列通常被稱爲 作爲「整數主鍵」。如果聲明的類型名稱完全是「INTEGER」,則PRIMARY KEY列僅成爲 整數主鍵。 「INT」或「BIGINT」或「SHORT INTEGER」或 「UNSIGNED INTEGER」等其他整數類型名稱會導致主鍵列的行爲與具有整數親和性和唯一索引的 普通表列一樣,而不是 別名爲rowid。
這一點我想給你完美的答案:
定義你的桌子上的INTEGER主鍵,使用該選擇。您將獲得使用ROWID的速度(因爲如上所述,它只是一個別名),您將在架構中看到您正在做的事情。