提交 5bb8473f 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 2ac243aa
......@@ -34,4 +34,6 @@ MySQL 运维篇
- 3. [https://www.yuque.com/heychu/akbndd/zhuxqd](https://www.yuque.com/heychu/akbndd/zhuxqd)
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=86&spm_id_from=pageDriver
\ No newline at end of file
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=89&spm_id_from=pageDriver
\ No newline at end of file
# 索引
# MySQL索引学习笔记
1. 索引概述
2. 索引结构
......@@ -8,6 +8,7 @@
6. 索引使用
7. 索引失效的场景
8. 索引设计原则
9. 总结
## 1. 索引概述
......@@ -2010,3 +2011,104 @@ explain select * from tb_user where profession = '美术' and age >= 22 and stat
+----+-------------+---------+------------+-------+--------------------------------+--------------------------------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)
```
## 8、索引设计原则
1. 数据量较大(100W),且查询比较频繁的表建立索引
2. 针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引
3. 尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高
4. 如果是字符串类型,字段的长度较长,可以针对字段的特点,建立前缀索引
5. 尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率
6. 要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率
7. 如果索引列不能存储null值,请在创建表的时候使用`not null`约束它。当优化器知道每列是否包含null值时,它可以更好地确定哪个索引最有效的用于查询
## 9、总结
1. 索引概述
- 索引是高效获取数据的数据结构
- 索引是有序的数据结构
3. 索引结构
- B+Tree:
- 所有数据都出现在叶子节点
- 叶子节点行成双向链表
- Hash:
- Memory存储引擎支持
- 优点:性能较高(计算hash值,直接检索数据)
- 缺点:只支持精确匹配,不支持范围查询,不支持索引排序
3. 索引分类
- 常规分类:
- 主键索引 primary key
- 唯一索引 unique
- 常规索引
- 全文索引
- InnoDB:
- 聚集索引:叶子节点存放行数据(默认主键索引 、第一个唯一主键、自动生成隐藏的row.id)
- 二级索引:叶子节点存放主键
4. 索引语法
```sql
-- 创建索引
create [unique] index <index_name> on <table_name>(<column_name>);
-- 查看索引
show index from <table_name>
-- 删除索引
drop index <index_name> on <table_name>
```
5. SQL性能分析
- 执行频次:针对查询为主的sql进行优化
- 慢查询日志
- profile:每条SQL耗时情况
- explain 执行计划:评判SQL语句的性能
6. 索引使用
- 联合索引:
- 最左前缀法则:最左边的列必须存在。最左边的列存在,中间跳过某些列,后面的列索引会失效
- 范围查询:范围查询右侧的列会失效,优先使用(>=、<=)
- 索引失效:
- 索引列进行函数计算
- 隐式类型转换:字符串不加引号
- like模糊匹配:前面加了百分号
- or连接的索引:一侧有索引,一侧没有索引
- 数据分布影响:全表扫描比索引还快
- SQL提示
- 使用索引 `use index`
- 忽略索引 `ignore index`
- 强制使用索引 `force index`
- 覆盖索引
- 查询返回的列在索引结构中都包含了,不用走回表查询
- 回表查询:先走二级索引检索到行数据的id,再根据id到聚集索引查找行数据
- 前缀索引
- 字符串较长, 大文本字段
- 单列/联合索引
- 推荐使用联合索引,避免回表查询
7. 索引设计原则
- 表:数据量大,查询频次较高
- 字段:where/order by/group by之后的字段
- 索引
- 唯一索引 区分度高
- 联合索引 优先使用
- 前缀索引 字符串较长, 大文本字段
......@@ -50,3 +50,8 @@
[Twig](https://twig.symfony.com/): is a modern template engine for PHP
[FastAdmin](https://www.fastadmin.net/): 基于ThinkPHP和Bootstrap的极速后台开发框架
## awesome-php
- [https://github.com/ziadoz/awesome-php](https://github.com/ziadoz/awesome-php)
- [https://github.com/jingwentian/awesome-php](https://github.com/jingwentian/awesome-php)
- [https://github.com/shockerli/php-awesome/](https://github.com/shockerli/php-awesome/)
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册