鍍金池/ 教程/ 數(shù)據(jù)庫/ SQLite 索引
SQLite Having 子句
SQLite 運算符
SQLite 注入
SQLite Delete 語句
SQLite – Python
SQLite 數(shù)據(jù)類型
SQLite 簡介
SQLite 創(chuàng)建數(shù)據(jù)庫
SQLite Vacuum
SQLite Group By
SQLite 日期 & 時間
SQLite AND/OR 運算符
SQLite 刪除表
SQLite Distinct
SQLite Alter 命令
SQLite PRAGMA
SQLite 約束
SQLite 創(chuàng)建表
SQLite Like 子句
SQLite Limit 子句
SQLite Autoincrement
SQLite 子查詢
SQLite – C/C++
SQLite – PHP
SQLite 命令
SQLite Order By
SQLite Select 語句
SQLite Unions 子句
SQLite – Perl
SQLite – Java
SQLite 別名
SQLite 常用函數(shù)
SQLite Explain(解釋)
SQLite NULL 值
SQLite Glob 子句
SQLite 表達式
SQLite 視圖
SQLite Where 子句
SQLite Truncate Table
SQLite 索引
SQLite Insert 語句
SQLite 安裝
SQLite Indexed By
SQLite 分離數(shù)據(jù)庫
SQLite 觸發(fā)器
SQLite 語法
SQLite Joins
SQLite Update 語句
SQLite 附加數(shù)據(jù)庫
SQLite 事務

SQLite 索引

索引(Index)是一種特殊的查找表,數(shù)據(jù)庫搜索引擎用來加快數(shù)據(jù)檢索。簡單地說,索引是一個指向表中數(shù)據(jù)的指針。一個數(shù)據(jù)庫中的索引與一本書后邊的索引是非常相似的。

例如,如果您想在一本討論某個話題的書中引用所有頁面,您首先需要指向索引,索引按字母順序列出了所有主題,然后指向一個或多個特定的頁碼。

索引有助于加快 SELECT 查詢和 WHERE 子句,但它會減慢使用 UPDATE 和 INSERT 語句時的數(shù)據(jù)輸入。索引可以創(chuàng)建或刪除,但不會影響數(shù)據(jù)。

使用 CREATE INDEX 語句創(chuàng)建索引,它允許命名索引,指定表及要索引的一列或多列,并指示索引是升序排列還是降序排列。

索引也可以是唯一的,與 UNIQUE 約束類似,在列上或列組合上防止重復條目。

CREATE INDEX 命令

CREATE INDEX 的基本語法如下:

    CREATE INDEX index_name ON table_name;

單列索引

單列索引是一個只基于表的一個列上創(chuàng)建的索引?;菊Z法如下:

    CREATE INDEX index_name
    ON table_name (column_name);

唯一索引

使用唯一索引不僅是為了性能,同時也為了數(shù)據(jù)的完整性。唯一索引不允許任何重復的值插入到表中。基本語法如下:

    CREATE INDEX index_name
    on table_name (column_name);

組合索引

組合索引是基于一個表的兩個或多個列上創(chuàng)建的索引。基本語法如下:

    CREATE INDEX index_name
    on table_name (column1, column2);

是否要創(chuàng)建一個單列索引還是組合索引,要考慮到您在作為查詢過濾條件的 WHERE 子句中使用非常頻繁的列。

如果值使用到一個列,則選擇使用單列索引。如果在作為過濾的 WHERE 子句中有兩個或多個列經常使用,則選擇使用組合索引。

隱式索引

隱式索引是在創(chuàng)建對象時,由數(shù)據(jù)庫服務器自動創(chuàng)建的索引。索引自動創(chuàng)建為主鍵約束和唯一約束。

實例

下面是一個例子,我們將在 COMPANY 表的 salary 列上創(chuàng)建一個索引:

    sqlite> CREATE INDEX salary_index ON COMPANY (salary);

現(xiàn)在,讓我們使用 .indices 命令列出 COMPANY 表上所有可用的索引,如下所示:

    sqlite> .indices COMPANY

這將產生如下結果,其中 _sqlite_autoindex_COMPANY1 是創(chuàng)建表時創(chuàng)建的隱式索引。

    salary_index
    sqlite_autoindex_COMPANY_1

您可以列出數(shù)據(jù)庫范圍的所有索引,如下所示:

    sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

DROP INDEX 命令

一個索引可以使用 SQLite 的 DROP 命令刪除。當刪除索引時應特別注意,因為性能可能會下降或提高。

基本語法如下:

    DROP INDEX index_name;

您可以使用下面的語句來刪除之前創(chuàng)建的索引:

    sqlite> DROP INDEX salary_index;

什么情況下要避免使用索引?

雖然索引的目的在于提高數(shù)據(jù)庫的性能,但這里有幾個情況需要避免使用索引。使用索引時,應重新考慮下列準則:

  • 索引不應該使用在較小的表上。
  • 索引不應該使用在有頻繁的大批量的更新或插入操作的表上。
  • 索引不應該使用在含有大量的 NULL 值的列上。
  • 索引不應該使用在頻繁操作的列上。
上一篇:SQLite 子查詢下一篇:SQLite Order By