乐清开发网站公司,石家庄专业制作网站,互联网营销是干嘛的,安庆网站设计定位慢查询 #x1f496; 开源工具
调试工具#xff1a;Arthas#xff08;阿尔萨斯#xff09;运维工具#xff1a;Prometheus#xff08;普罗米修斯#xff09;、Skywalking
#x1f496; MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关
slow_query_log1
# 设置慢…
定位慢查询 开源工具
调试工具Arthas阿尔萨斯运维工具Prometheus普罗米修斯、Skywalking MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关
slow_query_log1
# 设置慢查询日志的时间为 2 秒SQL 语句执行时间超过 2 秒就会视为慢查询记录慢查询日志
long_query_time2配置完毕之后通过以下指令重新启动MySQL服务器进行测试查看慢日志文件中记录的信息
/var/lib/mysql/localhost-slow.log 慢SQL分析
可以采用 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息
MySQL 存储引擎 MySQL 体系结构
四层连接层、服务层、引擎层、存储层。 存储引擎类型
存储引擎就是存储数据、建立索引、更新查询数据等技术的实现方式。存储引擎是基于表的而不是基于库的所以存储引擎也可以称为 表类型。 MEMORY把数据存储在内存 InnoDB
介绍 兼顾高可靠性和高性能的通用存储引擎在MySQL5.5 之后InnoDB 是 MySQL默认的存储引擎 特点 DML 操作遵循ACID模型支持事务行级锁支持外键 FOREIGN KEY 约束保证数据的完整性和正确性 文件 xxx.ibdxxx代表的是表名innoDB引擎的每张表都会对应这样一个表空间文件存储该表的表结构frm、sdi、数据和索引xxx.frm 存储表结构MySQL8.0时合并在表名.ibd中
索引
索引index是帮助MySQL高效获取数据的数据结构主要是用来提高数据检索的效率降低数据库的IO成本同时通过索引列对数据进行排序降低数据排序的成本也能降低了CPU的消耗。 底层数据结构 二叉搜索树 效率不稳定最坏的情况是 O(n) 红黑树 解决了二叉搜索树不平衡的问题但是当数据量过大时树的层数会很多查询效率较好但不是最优 B 树 B-TreeB树是一种多叉路衡查找树相对于二叉树B树每个节点可以有多个分支即多叉。
以一颗最大度数max-degree为 5(5阶) 的b-tree为例那这个B树每个节点最多存储 4个key。 B 树
BTree 是在 BTree 基础上的一种优化使其更适合实现外存储索引结构InnoDB 存储引擎就是用 BTree实现其索引结构 B 树 vs B树
B树所有节点都存储数据B树只在叶子节点存储数据B树的叶子节点是一个双向链表
B 树的优势
磁盘读写代价低只需在叶子节点那层进行磁盘IO中间的查询过程节点无需操作查询效率更加稳定数据都存储在叶子节点便于区间查询叶子节点双向链表 索引分类 聚簇索引 主要是指数据与索引放到一块B树的叶子节点保存了整行数据有且只有一个一般情况下用主键作为聚簇索引的索引列 非聚簇索引二极索引 值的是数据与索引分开存储B树的叶子节点保存对应的主键可以有多个一般我们自己定义的索引都是非聚簇索引 回表查询
回表就是通过二级索引找到对应的主键值然后再通过主键值找到聚集索引中所对应的整行数据
覆盖索引不需要回表查询 覆盖索引 覆盖索引是指 select查询 语句使用了索引需要返回的列全部出现在索引中 如果我们使用主键 id 查询它会直接走聚簇索引查询聚簇索引中包含所有数据肯定是覆盖索引如果按照二级索引查询数据的时候返回的列中没有创建索引有可能会触发回表查询尽量避免使用select *尽量在返回的列中都包含添加索引的字段 深度分页
超大分页一般是指在数据量比较大时我们使用了 limit分页查询并且需要对数据进行排序这个时候效率就很低我们可以采用覆盖索引和子查询来解决
先分页查询数据的 id字段确定了id之后再用子查询来过滤只查询这个id列表中的数据就可以了 索引创建原则
数据量较大时查询多 增删少的表单表超 10 万数据提高查询性能针对常用作查询条件where、排序order by、分组group by操作的字段建立索引选择区分度高的列字符串类型较长时建立前缀索引 前缀索引能有效减小索引文件的大小让每个索引页可以保存更多的索引值从而提高了索引查询的速度。但前缀索引也有它的缺点不能在 order by 或者 group by 中触发前缀索引也不能把它们用于覆盖索引 尽量使用联合索引可以更好地实现索引覆盖控制数量越多的索引导致维护索引结构的代价也越大反而降低增删改的效率索引列尽可能创建 非空(NOT NULL)列方便优化器更好地选择要使用的索引。 索引失效
违反最左匹配原则 相当于多级目录不能跳过上一级目录直接查询下一级目录比如字典按拼音查字先查第一个 字母才能在第一个字母的基础上 按第二个字母查 使用了范围查询的列 右边的索引列失效不可用范围查询本身也不一定生效优化器会计算符合条件的数据比例视情况使用索引在索引列上使用函数、运算操作失效 字符串不加 引号导致查询优化器进行类型转换使用了函数操作失效原因有操作索引的条件就会有变动变动之后就查不了比如查字典查“ha”h 变成了 其他字母那就没法子查了 以 % 开头的模糊查询失效
SQL 优化
当然有索引一席之地参考上文 表设计优化 SQL 语句优化 主从复制 读写分离 其实还有个分库分表