SQLite 索引
索引是一種特殊的查找表,可以使用搜索引擎的數據庫,以加快數據檢索。簡單地說,索引是一個指針,表中的數據。一個數據庫中的索引是非常相似在一本書的背部的索引。
例如,如果你想在一本書中引用的所有頁麵討論某個話題,先參考索引,按字母順序列出所有主題,再交由一個或多個特定的頁碼。
索引有助於加快SELECT查詢和WHERE子句,但它會減慢數據的輸入,UPDATE和INSERT語句。索引可以創建或刪除,但數據不會影響。
創建索引涉及CREATE INDEX語句,它允許命名的索引,索引指定表的一列或多列,並指示索引是否在升序或降序排列。
索引也可以是唯一的,類似UNIQUE約束,在列上有一個索引的列或組合索引防止重複條目。
CREATE INDEX命令:
CREATE INDEX的基本語法如下:
CREATE INDEX index_name ON table_name;
單列索引:
單列索引是一個隻有基於一個表的列上創建。基本語法如下:
CREATE INDEX index_name ON table_name (column_name);
唯一索引:
使用唯一索引不僅是性能,同時也為數據的完整性。唯一索引不允許任何重複的值插入到表中。基本語法如下:
CREATE INDEX index_name on table_name (column_name);
複合索引:
組合索引是一個表的兩個或多個列上的索引。基本語法如下:
CREATE INDEX index_name on table_name (column1, column2);
是否要創建一個單列索引或組合索引,考慮到列,可以使用非常頻繁查詢的WHERE子句作為過濾條件。
應該有一列,單列索引應該是選擇。如果有兩個或多個列中經常使用的WHERE子句作為過濾器,組合索引將是最好的選擇。
隱式索引:
隱式式索引是由數據庫服務器創建一個對象時,會自動創建索引。索引自動創建的主鍵約束和唯一約束。
例子
下麵是一個例子,我們將創建一個索引表COMPANY的 薪水列:
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
現在,讓我們列出了所有的索引,COMPANY表使用.indices命令如下:
sqlite> .indices COMPANY
這將產生以下結果,其中sqlite_autoindex_COMPANY_1是創建表本身時創建了一個隱式索引。
salary_index
sqlite_autoindex_COMPANY_1
可以列出所有的索引數據庫範圍如下:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
DROP INDEX命令:
一個索引可以使用SQLite DROP命令刪除。應注意當刪除索引,因為性能可能會減緩或改善。
基本語法如下:
DROP INDEX index_name;
可以使用下麵的語句來刪除以前創建的索引:
sqlite> DROP INDEX salary_index;
索引什麼情況避免使用?
雖然索引的目的在於提高數據庫的性能,有時間時,應避免。使用索引時,應重新考慮下列準則:
-
索引不應該使用較小的表上。
-
有頻繁的,大批量的更新或插入操作的表。
-
索引不應使用含有大量的NULL值的列。
-
頻繁操作的列都將不會被索引。