1.索引是什么?
索引(Index)是帮助MySQL高效获取数据的数据结构。
索引就是数据结构,排好序的快速查找数据结构。
2.索引怎么分类?
①单值索引
概念:即一个索引只包含单个列,一个表可以有多个单列索引。
②唯一索引
概念:索引列的值必须唯一,但允许有空值。
③主键索引
概念:设定为主键后数据库会自动建立索引,innodb为聚簇索引。
④复合索引
概念:即一个索引包含多个列。
3.索引的创建、查看、删除
操作 |
命令 |
创建 |
CREATE [UNIQUE ] INDEX [indexName] ON table_name(column)) |
删除 |
DROP INDEX [indexName] ON mytable; |
查看 |
SHOW INDEX FROM table_name\G |
使用Alter命令 |
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) : 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。 |
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) |
|
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。 |
|
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。 |
4.索引的创建时机
① 适合创建索引的情况
- 主键自动建立唯一索引;
- 频繁作为查询条件的字段应该创建索引
- 查询中与其它表关联的字段,外键关系建立索引
- 单键/组合索引的选择问题, 组合索引性价比更高
- 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
- 查询中统计或者分组字段
- 表记录太少
- 经常增删改的表或者字段
- Where条件里用不到的字段不创建索引
- 过滤性不好的不适合建索引
②不适合创建索引的情况
- 表记录太少
- 经常增删改的表或者字段
- Where条件里用不到的字段不创建索引
- 过滤性不好的不适合建索引
5.explain性能分析
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
用法: Explain+SQL语句。
6.索引有效的原则
①全值匹配我最爱;
②最佳左前缀法则。