MySQL索引
數據庫索引是一種數據結構,目的是提高表的操作速度。可以使用一個或多個列,提供快速隨機查找和訪問記錄的高效排序來創建索引。
要創建的索引,應當認為哪列將用於使SQL查詢,創建對這些列的一個或多個索引。
實際上,索引也是表,其中保存主鍵或索引字段的指針並指向每個記錄到實際的表的類型。
用戶無法看到索引,它們隻是用來加速查詢,並將被用於數據庫搜索引擎在查找記錄時提高速度。
INSERT和UPDATE語句需要更多的時間來創建索引,作為在SELECT語句快速在這些表上操作。其原因是,在執行插入或更新數據時,數據庫需要將插入或更新索引值也更新。
簡單和唯一索引
可以在表上創建唯一值索引。唯一索引意味著兩行不能有相同的索引值。下麵是在表上創建索引的語法:
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
可以使用一個或多個列來創建索引。例如,我們可以使用tutorial_author 來創建一個 tutorials_tbl 索引。
CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author)
可以在表上創建一個簡單的索引。創建簡單的索引隻是省略UNIQUE關鍵字。簡單的索引可以在表中重複的值。
如果想索引的列的值按降序排列,可以列名之後添加保留字DESC。
mysql> CREATE UNIQUE INDEX AUTHOR_INDEX ON tutorials_tbl (tutorial_author DESC)
使用ALTER命令來添加和刪除索引
有四種類型的索引可以添加到一個表:
-
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 添加一個主鍵(PRIMARY KEY),這意味著索引值必須是唯一的,而不能為空。
-
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 創建一個索引的量的值必須是唯一的(除了不能使用NULL值,其它的可以出現多次)。
-
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 增加普通的索引,其中的任何值的出現多次。
-
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): 創建一個用於文本搜索目的一種特殊的FULLTEXT索引。
下麵是一個添加索引到現有表的例子。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
可以通過使用 ALTER 命令以及DROP子句來刪除索引。試試下麵的例子,用來刪除上麵創建的索引。
mysql> ALTER TABLE testalter_tbl DROP INDEX (c);
使用ALTER命令來添加和刪除PRIMARY KEY
也可以用同樣的方法添加主鍵。但要在列確保主鍵正常使用,需要指定使用 NOT NULL。
下麵是一個例子添加主鍵在現有的表。列需要添加 NOT NULL 屬性,然後再添加為一個主鍵。
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL; mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
可以使用ALTER命令刪除主鍵如下:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
要刪除索引的不是主鍵,必須指定索引名。
顯示索引信息
可以使用SHOW INDEX命令,列出所有與表相關的索引。 垂直格式輸出(由\G指定),這是經常有用的語句,以避免長線概括輸出:
試試下麵的例子:
mysql> SHOW INDEX FROM table_name\G ........