### 创建索引
#### 建表时:
~~~
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锁机制
- 锁机制介绍
- 锁的几种形式
- 表锁操作
- 行锁操作
- 数据碎片与维护
- 范式
- 第一范式
- 第二范式
- 第三范式
- 反三范式
- 主从复制
- 介绍
- 读写分离