From 5bb8473f46b76633b430b9fe1628ddf581202259 Mon Sep 17 00:00:00 2001 From: pengshiyu <1940607002@qq.com> Date: Wed, 11 May 2022 15:51:06 +0800 Subject: [PATCH] fix --- blog/mysq-advance/index.md | 4 +- blog/mysq-advance/mysql-index.md | 104 ++++++++++++++++++++++++++++++- doc/php.md | 7 ++- 3 files changed, 112 insertions(+), 3 deletions(-) diff --git a/blog/mysq-advance/index.md b/blog/mysq-advance/index.md index 70880a1..c9dbdf8 100644 --- a/blog/mysq-advance/index.md +++ b/blog/mysq-advance/index.md @@ -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 diff --git a/blog/mysq-advance/mysql-index.md b/blog/mysq-advance/mysql-index.md index a60d906..6253a6d 100644 --- a/blog/mysq-advance/mysql-index.md +++ b/blog/mysq-advance/mysql-index.md @@ -1,4 +1,4 @@ -# 索引 +# 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 on (); +-- 查看索引 +show index from +-- 删除索引 +drop index on +``` + +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之后的字段 +- 索引 + - 唯一索引 区分度高 + - 联合索引 优先使用 + - 前缀索引 字符串较长, 大文本字段 + diff --git a/doc/php.md b/doc/php.md index 406b7f2..0b7a083 100644 --- a/doc/php.md +++ b/doc/php.md @@ -49,4 +49,9 @@ [Twig](https://twig.symfony.com/): is a modern template engine for PHP -[FastAdmin](https://www.fastadmin.net/): 基于ThinkPHP和Bootstrap的极速后台开发框架 \ No newline at end of file +[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 -- GitLab