##索引優點
索引看著挺高大上的一個名字,說白了就是我們書最新面的目錄。
假如你用新華字典來查找“張”這個漢字,不使用目錄的話,你可能要從新華字典的第一頁找到最后一頁,可能要花二個小時。字典越厚呢,你花的時間就越多。現在你使用目錄來查找“張”這個漢字,張的首字母是z,z開頭的漢字從900多頁開始,有了這條線索,你查找一個漢字可能只要一分鐘,由此可見索引的重要性。
索引用于快速找出在某個列中有一特定值的行。
不使用索引,MySQL必須從第1條記錄開始然后讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要看所有數據。
當然索引也不易過多,索引越多寫入,修改的速度越慢。因為,寫入修改數據時,也要修改索引。
##MySQL的索引類型
| 索引類型 | 功能說明 |
| -- | -- |
| 普通索引 | 最基本的索引,它沒有任何限制 |
| 唯一索引 | 某一行企用了唯一索引則不準許這一列的行數據中有重復的值。針對這一列的每一行數據都要求是唯一的 |
| 主鍵索引 | 它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引,常用于用戶ID。類似于書中的頁碼 |
| 全文索引 | 對于需要全局搜索的數據,進行全文索引 |
注意:以下部分請學習完12.7后再進行學習。
###普通索引
| 類型 | 詳細說明 |
| -- | -- |
| 基本語法 | alter table 表 add index(字段) |
| 示例 | ALTER TABLE `money` ADD INDEX(`username`); |
| 示例解釋 | 為money表的username字段增加索引 |
###唯一索引
| 類型 | 詳細說明 |
| -- | -- |
| 基本語法 | alter table 表 add UNIQUE(字段) |
| 示例 | ALTER TABLE `money` ADD UNIQUE(`email`); |
| 示例解釋 | 為money表的email字段增加唯一索引 |
###全文索引
| 類型 | 詳細說明 |
| -- | -- |
| 基本語法 | alter table 表 add FULLTEXT(字段) |
| 示例 | ALTER TABLE `money` ADD FULLTEXT(`content`); |
| 示例解釋 | 為money表的content字段增加唯一索引 |
###主鍵索引
| 類型 | 詳細說明 |
| -- | -- |
| 基本語法 | alter table 表 add PRIMARY KEY(字段) |
| 示例 | ALTER TABLE `money` ADD PRIMARY KEY(`id`); |
| 示例解釋 | 為money表的id字段增加主鍵索引 |
###創建表時也可以聲明索引
創建表時可在創建表語句后加上對應的類型即可聲明索引:
> PRIMARY KEY(字段)
> INDEX [索引名] (字段)
> FULLTEXT [索引名] (字段)
> UNIQUE[索引名] (字段)
注:中括號中的索引名,代表可選。
整體示例如下:
> CREATE TABLE `test` (
`id` INT NOT NULL ,
`username` VARCHAR(20) NOT NULL ,
`password` INT NOT NULL ,
`content` INT NOT NULL ,
PRIMARY KEY (`id`),
INDEX pw (`password`),
UNIQUE (`username`),
FULLTEXT (`content`)
) ENGINE = InnoDB;