# 為表的字段創建和刪除索引
> 無論建立主鍵索引還是普通索引,都要在表的對應列上創建,可以對單列創建索引,也可以對多列創建索引。
### 創建和刪除主鍵索引
查詢數據庫,按主鍵查詢速度最快的,每個表只能有一個主鍵列,但是可以有多個普通索引列。主鍵列要求列的所有內容必須唯一,而索引列不要求內容必須唯一。
1. 在建表的時候指定(如上述典型建表語句)
2. 建表后通過alter命令增加、刪除主鍵索引
```
mysql> alter table app_member change uid uid int primary key auto_increment not null ;
mysql> alter table app_member drop primary key;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
```
## 普通索引的建立
1. 在建表時可以指定建立普通索引
2. 使用alter命令新增或者刪除普通索引
```
mysql> alter table app_member add key qq(qq);
mysql> alter table app_member drop key qq;
# 或者使用drop方式刪除索引
mysql> drop index nickname on app_member;
```
### 使用create對字段的前N個字符創建普通索引
> 當遇到表中比較大的列時,列內容的前n個字符在所有內容中已經接近唯一時,這時可以對列的前n個字符建立索引,而無須對整個列建立索引,這樣可以節省創建所以占用的系統空間,以及降低讀取和更新維護索引消耗的系統資源
```
mysql> create index qq on app_member(qq(6));
mysql> show index from app_member\G # 更加詳細的查看表的索引
```
### 為表的多個字段創建聯合索引
```
mysql> create index reg_ip_time on app_member(reg_ip,reg_time);
```
## 創建唯一索引
```
mysql> create unique index nickname on app_member(`nickname`);
mysql> drop index nickname on app_member;
#使用alter新增唯一索引方式操作
mysql> alter table app_member add unique key nickname(`nickname`);
#使用alter方式刪除索引操作
mysql> alter table app_member drop key nickname;
```
## 索引列的創建生效條件
#### 既然所以可以加快查詢速度,那么給所有的列建立索引?
> 因為索引不但占用系統空間,更新數據庫時還需要維護索引數據,因此,索引是一把雙刃劍,并不是越多越好。
> 例如:數十到數百行的小表上無需建立索引,更新頻繁,讀取較少的表要少建立索引。
#### 需要在那些列創建索引呢?
> 索引一定要創建在**where后的條件列**上,而不是select后的選擇數據列上。
> 另外我們要盡量選擇**唯一值多**的**大表上**建立索引
* * * * *
# 小結
> 創建主鍵索引
> `alter table app_member change uid uid int primary key;`
> 刪除主鍵索引
> `alter table app_member drop primary key;`
> 創建普通索引
> `alter table app_member add index qq(qq(6));`
> 根據列的前n個字符創建索引
> `create index qq on app_member(qq);`
> 根據多個列創建聯合索引
> `create index reg_time_ip on app_member(reg_time,reg_ip);`
> 根據多個列的前n個字符創建聯合索引
> `create index reg_time_ip on app_member(reg_time(8),reg_ip(8));`
> 刪除普通索引
> `alter table app_member drop index nickname;`
- 寫在前面
- MySQL的使用
- MySQL多表同時刪除方案
- MySQL跨表、多表更新SQL語句總結
- MySQL存儲引擎
- 安裝
- 常規方式編譯安裝MySQL
- 采用cmake方式編譯安裝MySQL
- 使用rpm包安裝MySQL
- 使用yum方式安裝MySQL
- 采用二進制方式免編譯安裝MySQL
- 多實例的安裝
- 什么是多實例
- 多實例的作用、問題以及應用場景
- 多實例安裝01【推薦】
- 多實例官方安裝方案02
- 啟動、用戶和權限管理
- 單實例MySQL的啟動和關閉的方法
- 設置及修改MySQL root用戶密碼
- 找回丟失的MySQL root用戶密碼
- 創建MySQL用戶及用戶權限管理
- 基礎命令的操作
- MySQL庫和表相關操作
- MySQL中的索引操作
- MySQL常用命令
- MySQL的錯誤代碼
- MySQL復習秘籍
- 備份與恢復
- 備份
- 恢復
- mysqlbinlog命令
- 服務日志
- 主從復制
- 主從復制部署配置問題匯總
- 主從復制讀寫分離
- 災難恢復
- 配置phpmyadmin連接多實例MySQL
- 其他相關
- Sphinx實驗
- 中文分詞技術
- MySQL語句大全
- 用戶創建、權限、刪除
- 數據庫與表顯示、創建、刪除
- 表復制及備份還原
- 數據庫表中數據操作
- 修改表的列與表名
- 修改表中的數據
- 查詢表
- 日志
- 批量修改Mysql表引擎為InnoDB的方法
- 數據庫抽象層 PDO
- PDO對象常用方法
- PDO 事務處理
- PDO 與 MySQLi 二者效率簡單比較
- 大小寫敏感性 lower_case_table_names
- CentOS7安裝MySQL5.7密碼查看與修改