位置:首頁 > 數據庫 > SQLite教學 > SQLite 索引

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值的列。

  • 頻繁操作的列都將不會被索引。