資料庫-mysql索引

來源:互聯網
上載者:User

標籤:pretty   lis   個人   缺點   mysql索引   create   磁碟   實體   htm   

MySQL 索引

MySQL索引的建立對於MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。

打個比方,如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用索引的MySQL就是一個人力三輪車。

索引分單列索引和複合式索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是複合式索引。複合式索引,即一個索引包含多個列。

建立索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。

實際上,索引也是一張表,該表儲存了主鍵與索引欄位,並指向實體表的記錄。

上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要儲存資料,還要儲存一下索引檔案。

建立索引會佔用磁碟空間的索引檔案。

普通索引建立索引

這是最基本的索引,它沒有任何限制。它有以下幾種建立方式:

CREATE INDEX indexName ON mytable(username(length));

如果是CHAR,VARCHAR類型,length可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定 length。

修改表結構(添加索引)
ALTER mytable ADD INDEX [indexName] ON (username(length))
建立表的時候直接指定
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   INDEX [indexName] (username(length))   );
刪除索引的文法
DROP INDEX [indexName] ON mytable;
唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是複合式索引,則列值的組合必須唯一。它有以下幾種建立方式:

建立索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表結構
ALTER table mytable ADD UNIQUE [indexName] (username(length))
建立表的時候直接指定
CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   UNIQUE [indexName] (username(length))   );
使用ALTER 命令添加和刪除索引

有四種方式來添加資料表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。

     

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句建立索引的值必須是唯一的(除了NULL外,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 命令添加和刪除主鍵

主鍵只能作用於一個列上,添加主鍵索引時,你需要確保該主鍵預設不為空白(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;

刪除主鍵時只需指定PRIMARY KEY,但在刪除索引時,你必須知道索引名。

顯示索引資訊

你可以使用 SHOW INDEX 命令來列出表中的相關的索引資訊。可以通過添加 \G 來格式化輸出資訊。

嘗試以下執行個體:

mysql> SHOW INDEX FROM table_name; \G

http://www.runoob.com/mysql/mysql-index.html

資料庫-mysql索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.