SQL 創(chuàng)建索引(CREATE INDEX 語句)

在本教程中,您將學習如何在表上創(chuàng)建索引以提高數(shù)據(jù)庫性能。

什么是索引?

索引是與表相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu),它基于一個或多個列(索引鍵)中的值提供對表中行的快速訪問。

假設(shè)您的數(shù)據(jù)庫中有一個customers表,并且您想使用以下語句找出名字是以字母A開頭的所有客戶。

SELECT cust_id, cust_name, address FROM customers 
WHERE cust_name LIKE 'A%';

為了找到這樣的客戶,服務(wù)器必須在customers表中逐行掃描并檢查名字列的內(nèi)容。盡管對于只有幾行的表來說,它可以正常工作,但是請想象一下,如果該表包含一百萬行,那么回答查詢可能需要花費多長時間。在這種情況下,您可以通過將索引應(yīng)用于表來加快處理速度。

創(chuàng)建索引

您可以使用以下CREATE INDEX語句創(chuàng)建索引:

CREATE INDEX index_name ON table_name (column_name);

例如,要在客戶表的name列上創(chuàng)建索引,可以使用:

CREATE INDEX cust_name_idx ON customers (cust_name);

默認情況下,索引將允許重復的條目并按升序?qū)l目進行排序。 要要求唯一索引條目,請在CREATE之后添加關(guān)鍵字UNIQUE,如下所示:

CREATE UNIQUE INDEX cust_name_idx 
ON customers (cust_name);

在MySQL中,您可以查看特定表上的可用索引,如下所示:

mysql> SHOW INDEXES FROM customers \G

提示:用\G代替分號(;)終止SQL語句。 如果結(jié)果對于當前窗口而言太寬,則垂直顯示結(jié)果而不是常規(guī)表格格式。

創(chuàng)建多列索引

您還可以構(gòu)建跨多列的索引。例如,假設(shè)您在數(shù)據(jù)庫中已命名表的用戶具有列first_namelast_name,和您經(jīng)常訪問使用這些列,那么你可以建立在兩個列的索引在一起以提高性能的用戶的記錄,如下圖:

CREATE INDEX user_name_idx ON users (first_name, last_name);

提示:您可以將數(shù)據(jù)庫索引視為書籍的索引部分,以幫助您快速查找或定位書籍中的特定主題。

索引的缺點

索引應(yīng)謹慎創(chuàng)建。因為每次在表中添加,更新或刪除行時,都必須修改該表上的所有索引。因此,擁有的索引越多,服務(wù)器需要執(zhí)行的工作就越多,這最終會導致性能降低。

以下是創(chuàng)建索引時可以遵循的一些基本準則:

  • 為您經(jīng)常用來檢索數(shù)據(jù)的列創(chuàng)建索引。

  • 不要為從未用作檢索鍵的列創(chuàng)建索引。

  • 用于聯(lián)接以改善聯(lián)接性能的索引列。

  • 避免包含太多NULL值的列。

同樣,小表不需要索引,因為在小表的情況下,服務(wù)器掃描表通常比先查看索引要快。

注意:創(chuàng)建表時,大多數(shù)數(shù)據(jù)庫系統(tǒng)(如MySQL,SQL Server等)都會自動為表PRIMARY KEYUNIQUE列創(chuàng)建索引。

刪除索引

您可以使用以下語句刪除不再需要的索引。

DROP INDEX index_name ON table_name;

下面的語句將從customers表刪除索引cust_name_idx。

DROP INDEX cust_name_idx ON customers;

此外,如果刪除表,那么所有關(guān)聯(lián)的索引也會被刪除。

警告:刪除索引之前,您應(yīng)該進行核對刪除索引會造成的影響。作為一般經(jīng)驗法則,切勿盲目創(chuàng)建或刪除索引。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清