当前位置: 首页 > article >正文

mysql手册17_经验总结

mysql手册17_经验总结

      • 1、如何定位慢查询
      • 2、如何分析慢查询语句
      • 3、如何使用 EXPLAIN 优化查询
      • 4、什么是聚簇索引和二级索引(非聚簇索引)
      • 5、超大分页处理

1、如何定位慢查询

  • 方案一:使用开源工具比如 Skywalking
  • 方案二:开启 MySQL 自带的慢查询日志

在MYSQL的配置文件(/etc/my.cnf)中配置如下信息开启慢查询日志

# 开启慢查询日志
slow_query_log = 1
# 指定慢查询日志文件路径
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 设置慢查询的阈值(单位为秒,默认为10)
long_query_time = 2

2、如何分析慢查询语句

  • id: 查询的标识符。如果查询包含子查询,MySQL 会为它们分配不同的 id。
  • select_type: 查询的类型(SIMPLE 表示简单 SELECT,不是使用 UNION 或子查询等)。
  • table: 输出行所引用的表。
  • partitions: 匹配的分区。
  • type: 连接类型,如 ALL(全表扫描)、index(索引全扫描)、range(索引范围扫描)等。
  • possible_keys: 显示可能应用在这张表上的索引,但不一定被查询实际使用。
  • key: 实际使用的索引。如果为 NULL,则没有使用索引。
  • key_len: 使用的索引的长度。在某些情况下,不是索引的全部部分都会被使用。
  • ref: 显示索引的哪一列或常量被用于查找值。
  • rows: MySQL 认为必须检查的用来返回请求数据的行数。
  • filtered: 表示返回结果的行占开始找到符合表条件的行的百分比。
  • Extra: 包含不适合在其他列中显示但对执行计划非常重要的额外信息。

3、如何使用 EXPLAIN 优化查询

  • 查看是否有索引被使用:确保 key 列不是 NULL,表示查询使用了索引。
  • 注意 type 列:尽量避免 ALL(全表扫描),努力优化到 range、ref、const 等更高效的类型。
  • 检查 rows 列:这个值越小越好,表示 MySQL 需要的扫描行数越少。
  • 分析 Extra 列:查找是否有 Using filesort(表示 MySQL 需要对结果进行排序,可能意味着需要添加索引)或 Using temporary(表示 MySQL 需要使用临时表来存储中间结果,可能是索引不足或查询可以优化)。

4、什么是聚簇索引和二级索引(非聚簇索引)

聚簇索引:索引的叶子节点直接包含数据行,聚簇索引有且仅有一个。

如果存在主键,主键索引就是聚簇索引。
如果不存在主键,将使用第一个唯一索引作为聚簇索引。
如果既没有主键索引也没有唯一索引,InnoDB会自动生成一个rowid作为隐藏的聚簇索引。

二级索引:索引的叶子节点关联对应的主键,所以一般需要回表操作,二级索引可以存在多个。


5、超大分页处理

在数据量较大时进行 limit 分页查询,越靠后的数据分页查询效率会越低。
可通过 覆盖索引 + 子查询 进行优化,先查询出需要分页的ID范围,然后再根据这个范围去查询实际的数据

select * from user t1,
(select id from user order by id limit 9000000,10) t2
where t1.id = t2.id;

http://www.kler.cn/news/324046.html

相关文章:

  • 【LeetCode:219. 存在重复元素 II + 哈希表】
  • HTTP 1.0 2.0 3.0详解
  • 【网站架构部署与优化】nginx反向代理
  • Leetcode 45-跳跃游戏 II
  • 【深度学习】(10)--ResNet残差网络
  • linux如何配置静态IP
  • 【d53】【Java】【力扣】24.两两交换链表中的节点
  • 元组(tuple)和列表(list)的区别及应用场合
  • 记录linux环境下搭建本地MQTT服务器实现mqtt的ssl加密通讯
  • 在AI时代,程序员如何提升核心竞争力?
  • Unix-like 系统中的文件所有权管理:使用 sudo chown -R 命令的详解与实践应用
  • React 启动时webpack版本冲突报错
  • PHP爬虫:获取商品SKU详细信息的艺术
  • 【分布式微服务云原生】探索微服务架构下的服务治理
  • 【RocketMQ】RocketMQ安装
  • 560. 和为 K 的子数组
  • 【Linux】修改用户名用户家目录
  • 切换笔记本键盘的启用与禁用状态
  • windows C++-创建使用特定计划程序策略的代理
  • Redis缓存双写一致性笔记(上)
  • 机器学习西瓜书笔记(十一) 第十一章特征选择与稀疏学习+代码
  • JAVA-内部类和匿名内部类
  • Pandas空值识别,空值填充,空值过滤方法超详细解读
  • 如何手动安装libcrypto.so.10和libssl.so.10这两个库?
  • C语言 | Leetcode C语言题解之第440题字典序的第K小数字
  • pycharm2024版 搭配Anaconda创建pytorch项目
  • 算法分析,主定理
  • 【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景
  • c语言和c++一样吗
  • Spring Boot实现房产租赁业务逻辑