索引是特殊的查找表,數(shù)據(jù)庫搜索引擎可以使用索引來加速數(shù)據(jù)檢索。簡而言之,anindex是指向表中數(shù)據(jù)的指針。數(shù)據(jù)庫中的索引與書后的索引非常相似。
例如,如果要引用一本書中討論某個主題的所有頁面,則首先要參考索引,該索引按字母順序列出所有主題,然后引用一個或多個特定的頁碼。
索引有助于加快SELECT查詢和WHERE子句的速度,但它會通過UPDATE和INSERT語句減慢數(shù)據(jù)輸入速度??梢詣?chuàng)建或刪除索引,而不會影響數(shù)據(jù)。
創(chuàng)建索引涉及CREATE INDEX語句,該語句使您可以命名索引,指定表以及要索引的列或列,并指示索引是升序還是降序。
索引也可以是唯一的,類似于UNIQUE約束,因為索引可以防止存在索引的列或列組合中的重復(fù)條目。
以下是的基本語法CREATE INDEX。
CREATE INDEX index_name ON table_name;
單列索引是僅基于一個表列創(chuàng)建的索引?;菊Z法如下-
CREATE INDEX index_nameON table_name (column_name);
唯一索引不僅用于提高性能,而且還用于數(shù)據(jù)完整性。唯一索引不允許將任何重復(fù)的值插入表中?;菊Z法如下-
CREATE UNIQUE INDEX index_nameon table_name (column_name);
復(fù)合索引是表的兩個或多個列上的索引?;菊Z法如下-
CREATE INDEX index_nameon table_name (column1, column2);
無論是創(chuàng)建單列索引還是復(fù)合索引,都要考慮column(s)到您可能在查詢的WHERE子句中非常頻繁地使用它作為過濾條件。
如果只使用一列,則應(yīng)選擇單列索引。如果WHERE子句中經(jīng)常使用兩個或更多列作為過濾器,則復(fù)合索引將是最佳選擇。
隱式索引是創(chuàng)建對象時由數(shù)據(jù)庫服務(wù)器自動創(chuàng)建的索引。自動為主鍵約束和唯一約束創(chuàng)建索引。
Example
以下是一個示例,我們將在COMPANY表中為薪水列創(chuàng)建索引-
sqlite> CREATE INDEX salary_index ON COMPANY (salary);
現(xiàn)在,讓我們使用以下.indices命令列出COMPANY表中所有可用的索引:
sqlite> .indices COMPANY
這將產(chǎn)生以下結(jié)果,其中sqlite_autoindex_COMPANY_1是隱式索引,該隱式索引是在創(chuàng)建表本身時創(chuàng)建的。
salary_indexsqlite_autoindex_COMPANY_1
您可以列出所有索引數(shù)據(jù)庫范圍,如下所示:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';
可以使用SQLite DROP命令刪除索引。刪除索引時應(yīng)小心,因為性能可能會減慢或提高。
以下是基本語法如下-
DROP INDEX index_name;
您可以使用以下語句刪除以前創(chuàng)建的索引。
sqlite> DROP INDEX salary_index;
盡管索引旨在提高數(shù)據(jù)庫的性能,但有時應(yīng)避免使用它們。以下準則指示何時應(yīng)重新考慮使用索引。
索引不得用于-
小表。
具有頻繁,大量批處理更新或插入操作的表。
包含大量NULL值的列。
經(jīng)常操作的列。