做网站 收费,泰安什么网络平台好推广,有区域名和主机怎么做网站,创业做旅游网站目录
分析慢 SQL
SQL 优化
单表优化
多表优化 慢 SQL#xff1a;指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法#xff1a;通过慢查询日志来查找慢 SQL
MySQL 的慢查询日志是 MySQL 提供的一种日志记录#xff0c;它用来记录在 MySQL 中响应时间超过阈值的语句指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法通过慢查询日志来查找慢 SQL
MySQL 的慢查询日志是 MySQL 提供的一种日志记录它用来记录在 MySQL 中响应时间超过阈值的语句具体指运行时间超过 long_query_time慢查询阈值 值的 SQL就会被记录到慢查询日志中long_query_time 的默认值为 10s意思是运行超过 10s 以上的语句就会被当做慢 SQL 记录到日志中。 分析慢 SQL
如果一条 sql 执行很慢的话我们通常会使用 mysql 自动的执行计划 explain 来去查看这条 sql 的执行情况 关注 type 字段
all — 扫描全表数据index — 遍历索引range — 索引范围查找index_subquery — 在子查询中使用 refunique_subquery — 在子查询中使用 eq_refref_or_null — 对 null 进行索引的优化的 reffulltext — 使用全文索引ref — 使用非唯一索引查找数据eq_ref — 在 join 查询中使用主键或唯一索引关联const — 将一个主键放置到 where 后面作为条件查询 MySQL 优化器就能把这次查询优化转化为一个常量如何转化以及何时转化这个取决于优化器这个比 eq_ref 效率高一点。
如果存在全索引扫描type all 则说明没有走索引我们可以给查询的慢字段加上相应的索引就可以提交效率。
通过 key 和 key_len 检查是否命中了索引如果本身已经添加了索引也可以判断索引是否又失效的情况
通过 extra 建议判断是否出现回表的情况如果出现了可以尝试添加索引或修改返回字段来修复
SQL 优化
MySQL 优化分为 单表优化 和 多表优化
单表优化
建立并使用索引索引是提高查询最有效的手段优化查询语句避免使用 select * 只查询需要的字段使用小表驱动大表比如当 B 表的数据小于 A 表时先查 B 表再查 A 表查询语句select * from A where id in (select id from B)如果是聚合查询尽量使用 union all 代替 unionunion 会多义词过滤效率比较低不使用 order by rand()优化表结构和数据类型单表不要有太多字段建议在 20 个字段以内使用可以存下数据最小的数据类型尽可能使用 not null 定义字段因为 null 占用 4 字节空间。
多表优化
表拆分就是分表让每张表的数据量变小从而提高查询效率。表拆分又分为垂直分隔和水平分隔。 垂直拆分是指数据表列的拆分把一张列比较多的表拆分为多张表比如用户表中一些字段经常被访问将这些字段放在一张表中另外一些不常用的字段放在另一张表中插入数据时使用事务确保两张表的数据一致性。 水平拆分指数据表行的拆分表的行数超过200万行时就会变慢这时可以把一张的表的数据拆成多张表来存放。通常情况下我们使用取模的方式来进行表的拆分比如一张有 400W 的用户表 users为提高其查询效率我们把其分成 4 张表 users1users2users3users4然后通过用户 ID 取模的方法同时查询、更新、删除也是通过取模的方法来操作。 读写分离一般情况下对数据库而言都是“读多写少”换言之数据库的压力多数是因为大量的读取数据的操作造成的我们可以采用数据库集群的方案使用一个库作为主库负责写入数据其他库为从库负责读取数据。这样可以缓解对数据库的访问压力。
优化方式有很多 比如索引、查询优化减少联表查询等、减少锁竞争等因素所以具体的慢 SQL 优化需要根据实际的业务场景再做优化决策。