目录


| 优点 | 缺点 |
|---|---|
| 提高数据检索的效率,降低数据库的IO成本。 | 索引列也是要占用空间的。 |
| 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。 | 索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低。 |



| 分类 | 含义 | 特点 | 关键字 |
|---|---|---|---|
| 主键索引 | 针对于表中主键创建的索引 | 默认自动创建,只能有一个 | PRIMARY |
| 唯一索引 | 避免同一个表中某数据列中的值重复 | 可以有多个 | UNIQUE |
| 常规索引 | 快速定位特定数据 | 可以有多个 | |
| 全文索引 | 全文索引查找的是文本中的关键词,而不是比较索引中的值 | 可以有多个 | FULLTEXT |
| 分类 | 含义 | 特点 |
|---|---|---|
| 聚集索引 | 将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据 | 必须有,而且只有一个 |
| 二级索引 | 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键 | 可以存在多个 |


- CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_col_name, ... );
- /* UNIQUE表示唯一索引,FULLTEXT表示全文索引,不加表示创建一个常规索引 */
- /* index_name索引名 */
- /* table_name表名 */
- /* index_col_name关联的字段名 */
- SHOW INDEX FROM table name;
- 或
- SHOW INDEX FROM table name\G; /* 按列展示 */
DROP INDEX index_name ON table_name; 






数据库主要针对select查询语句进行优化,所以索引的优化占据了主导地位。下面讲解了四种SQL语句性能分析的工具。
SHOW GLOBAL STATUS LIKE 'Com_______'; /* 7个下划线 */ 
- /* 开启慢日志 */
- SET GLOBAL slow_query_log = ON;
- /* 设置超时时间 */
- SET GLOBAL long_query_time = 0.001;
show variables like 'slow_query%'; 
show variables like 'long_query%'; 

select @@have_profiling; 
set profiling = 1; select @@profiling; 
- /* 查看每一条SQL的耗时基本情况 */
- show profiles;
- /* 查看指定query_id的SQL语句各个阶段的耗时情况 */
- show profile for query query_id;
- /* 查看指定query_id的SQL语句CPU的使用情况 */
- show profile cpu for query query_id;



- /* 直接在select语句之前加上关键字explain/desc */
- EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;

SELECT* FROM 表名 WHERE 字段 = value; create index 索引名 on 表名(字段);