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 UNIQUE INDEX index_name
on table_name (column_name);

組合索引

組合索引是表中兩列或多列上的索引。基本語法如下:

CREATE INDEX index_name
on table_name (column1, column2);

無論建立單列索引還是組合索引,都要考慮在查詢的 WHERE 子句中經常用作篩選條件的列。

如果只有一個列被使用,則應選擇單列索引。如果 WHERE 子句中經常使用兩列或多列作為篩選器,則組合索引是最佳選擇。

隱式索引

隱式索引是由資料庫伺服器在建立物件時自動建立的索引。主鍵約束和唯一約束會自動建立索引。

示例

以下是一個示例,我們將在COMPANY表中為 salary 列建立索引:

sqlite> CREATE INDEX salary_index ON COMPANY (salary);

現在,讓我們使用.indices命令列出 COMPANY 表中所有可用的索引,如下所示:

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 值的列。
  • 經常被操作的列。
廣告
© . All rights reserved.