### 創建索引
#### 建表時:
~~~
mysql> create table 表名(
-> id int primary key, //主鍵索引
-> name varchar(20) unique key, //唯一索引
-> age tinyint,
-> intro varchar(20),
-> index(age), //普通索引
-> fulltext index(intro), //全文索引
-> index(name,age) //復合索引
);
~~~
**注意**:
**索引可以起名字,但是主索引不能起名字**,因為一個表僅僅可以有一個主鍵索引,其他索引可以出現多個。名字可以省略,mysql會默認生成,通常使用字段名來充當。
#### 更新表結構
~~~
alter table 表名 add primary key(id),add unique key(name),add index(age),add fulltext index(intro),add index(name,age) ;
~~~
**注意:**
1. 如果表中存在數據,數據符合唯一或主鍵約束才可能創建成功.
2. auto_increment屬性,依賴于一個KEY(主鍵或唯一).
### 刪除索引
修改表結構時完成:
**刪除主鍵索引:**
~~~
alter table 表名 drop primary key;
~~~
如果在刪除主鍵索引時,該字段中有auto_increment則先去掉該屬性再刪除。
~~~
alter table 表名 modify 主鍵字段名 字段屬性;
~~~
**刪除其他索引**
~~~
alter table t1 drop index 索引名稱;
~~~
可以通過show create table 表名; 查看索引名稱.
~~~
| t1 | CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
`intro` varchar(50) DEFAULT NULL,
UNIQUE KEY `name` (`name`),
KEY `age` (`age`),
KEY `name_2` (`name`,`age`),
FULLTEXT KEY `intro` (`intro`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
~~~
### 查看索引
~~~
show index from 表名;
~~~
結果
~~~
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t1 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| t1 | 0 | name | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | |
| t1 | 1 | age | 1 | age | A | 0 | NULL | NULL | YES | BTREE | | |
| t1 | 1 | name_2 | 1 | name | A | 0 | NULL | NULL | YES | BTREE | | |
| t1 | 1 | name_2 | 2 | age | A | 0 | NULL | NULL | YES | BTREE | | |
| t1 | 1 | intro | 1 | intro | NULL | 0 | NULL | NULL | YES | FULLTEXT | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
~~~
* * * * *
~~~
show create table 表名;
~~~
* * * * *
~~~
desc 表名;
~~~
- MySQL優化概述
- 存儲引擎的選擇
- innodb引擎
- myisam引擎
- memory引擎
- 查詢需優化語句
- 通用查詢日志
- 慢查詢日志
- profile機制
- 索引
- 索引基本介紹
- 索引類型
- 索引管理語法
- 創建索引主要事項
- 執行計劃
- 查看索引類型
- myisam索引數據結構
- innodb索引數據結構
- 索引覆蓋
- 索引使用原則
- 列獨立
- like查詢
- 復合索引使用
- or運算都具有索引
- mysql智能選擇
- 優化group by語句
- 前綴索引
- 全文索引
- 查詢緩存
- 查詢緩存操作
- 無緩存
- limit分頁優化
- 分區
- 分區介紹
- list分區
- range分區
- hash分區
- key(鍵值)分區
- 分區管理
- 分表
- 分表介紹
- 水平分表
- 垂直分表
- MySQL鎖機制
- 鎖機制介紹
- 鎖的幾種形式
- 表鎖操作
- 行鎖操作
- 數據碎片與維護
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主從復制
- 介紹
- 讀寫分離