我在 SQLite 表中有一個包含數字和文本值的列。是否可以創建部分索引,一個用于數值,一個用于文本值,以便針對數字和文本資料的查詢將使用適當的索引?或者,是否有一些“規范”的方法來解決這個問題,即索引/查詢文本/數字混合型別的列?
uj5u.com熱心網友回復:
簡短的回答 - 一切實際上都非常簡單,應該只在SQLite 論壇上按答案作業:
我相信您可以簡單地將您的內容放入資料庫中,然后查詢它,一切都會正常作業。
CREATE TABLE t1(a INTEGER PRIMARY KEY, data BLOB);
CREATE INDEX t1data ON t1(data);
您不需要特殊索引。您不需要在查詢中做任何特別的事情。它會起作用的。
不要想太多。
==================================================== ===============
官方檔案提供了更多詳細資訊,盡管相關部分位于資料型別頁面上,其中詳細介紹了 SQLite 中涉及混合型別資料的比較/排序(以及因此索引)操作邏輯。單個索引就足夠了,因為 SQLite 本質上將所有數值放在一個組中,將文本值放在另一組中。涉及數字過濾器的查詢將使用數值與數值進行比較,而文本檔案管理器將使用文本與文本值進行比較(這適用于精確過濾器、兩側有約束的范圍過濾器和模式文本過濾器。)
然而,為了實作直觀的行為,將混合型別列宣告為 BLOB 或 NUMERIC(取決于表示數字的文本文字是否應存盤為數字)并將數字作為數字文字插入到 BLOB 列中是很重要的。如果該列宣告為 TEXT,數值將存盤為文本,并且數值查詢將無法正常作業。
此外,仍然可以在 BLOB 列上指定排序規則:
CREATE TABLE t1(a INTEGER PRIMARY KEY, data BLOB COLLATE NOCASE);
CREATE INDEX t1data ON t1(data);
這樣,文本查詢將忽略大小寫,而數字查詢不會受到影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/525576.html
標籤:sqlite
