记录些 MySQL Explain 注意事项 & 性能查询常用命令

性能查询常用命令

(1)强制索引慎用:

SELECT * FROM table FORCE INDEX (idx_puid_shop_status)

(2)性能分析视图:

  • 在 MySQL 中,sys 库提供了许多用于性能分析的视图:

SHOW FULL TABLES IN sys WHERE TABLE_TYPE LIKE 'VIEW';

  • 低版本手动分析:

SELECT * FROM performance_schema.events_statements_summary_by_digest;

  • SHOW VARIABLES LIKE 'performance_schema'; -- 需为 ON

(3)SHOW VARIABLES LIKE 'eq_range_index_dive_limit'

eq_range_index_dive_limit 是个影响查询优化器行为的系统变量,它决定了优化器在处理等值范围查询(如 IN 或 OR 条件)时,选择使用 索引潜水 还是 索引统计 信息来估算符合条件的行数。

索引潜水(Index Dives)【优化器直接访问索引的实际数据页,统计符合条件的行数】

索引统计信息(Index Statistics)【优化器使用预先计算的索引统计信息(如 cardinality)来估算行数】

</

### 如何监控或查看 MySQL 查询命令的执行过程和性能MySQL 中,可以通过多种方式监控查询命令的执行情况和性能。以下是一些常用的方法及其详细说明: #### 1. 使用 `SHOW PROCESSLIST` 查看当前运行的线程 通过 `SHOW PROCESSLIST` 或者从 `information_schema.processlist` 表中查询,可以实时查看 MySQL 当前正在运行的线程及其状态。这有助于了解哪些查询正在执行以及它们的状态[^1]。 ```sql SHOW PROCESSLIST; ``` 或者: ```sql SELECT * FROM information_schema.processlist; ``` #### 2. 分析查询执行计划 MySQL 提供了 `EXPLAIN` 命令,用于查看 SQL 查询的执行计划。优化器会根据分析结果生成一份执行计划,这是 MySQL 用来执行 SQL 的具体方案。通过 `EXPLAIN`,可以了解查询是否使用了索引、扫描了多少行数据等信息[^3]。 ```sql EXPLAIN SELECT * FROM users WHERE id = 10; ``` #### 3. 启用慢查询日志 为了捕获执行时间较长的查询,可以启用慢查询日志。通过配置文件(如 `my.cnf` 或 `my.ini`),设置慢查询日志的相关参数,例如记录查询的时间阈值(`long_query_time`)。如果需要微秒级别的精度,可以考虑使用 Percona 提供的补丁[^4]。 配置示例: ```ini [mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 ``` #### 4. 使用性能模式(Performance Schema) MySQL性能模式提供了更详细的监控功能,可以跟踪查询的执行时间、锁等待、I/O 操作等。通过查询 `performance_schema` 数据库中的表,可以获得关于查询性能的深入信息[^2]。 例如,查看查询的执行时间: ```sql SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, AVG_TIMER_WAIT FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC; ``` #### 5. 查询缓存(Query Cache)的监控 尽管 Query Cache 在现代 MySQL 版本中已被废弃,但在早期版本中,它是一个重要的性能优化工具。可以通过系统变量和状态变量监控 Query Cache 的使用情况[^2]。 查询 Query Cache 状态: ```sql SHOW STATUS LIKE &#39;Qcache%&#39;; ``` #### 6. 使用第三方工具 除了 MySQL 内置的功能外,还可以借助第三方工具(如 `pt-query-digest`、`mysqldumpslow`)来分析查询日志,找出性能瓶颈[^5]。 例如,使用 `pt-query-digest` 分析慢查询日志: ```bash pt-query-digest /var/log/mysql/mysql-slow.log ``` --- ### 注意事项 - 慢查询日志的开启可能会对性能产生轻微影响,建议在主-从架构中选择一台从服务器启用慢查询日志。 - 对于生产环境中的查询优化,建议结合 `EXPLAIN` 和性能模式进行综合分析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值