| EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT NULL; |
| EXPLAIN FORMAT=JSON SELECT .... |
| |
| "cost_info": { |
| "read_cost": "1840.84", |
| "eval_cost": "193.76", |
| "prefix_cost": "2034.60", |
| "data_read_per_join": "1M" |
| } |
| EXPLAIN FORMAT=tree SELECT * FROM s1 INNER JOIN s2 ON s1.key1 = s2.key2 WHERE s1.common_field = 'a'\G |
| |
| *************************** 1. row *************************** |
| EXPLAIN: -> Nested loop inner join (cost=1360.08 rows=990) |
| -> Filter: ((s1.common_field = 'a') and (s1.key1 is not null)) (cost=1013.75 |
| rows=990) |
| -> Table scan on s1 (cost=1013.75 rows=9895) |
| -> Single-row index lookup on s2 using idx_key2 (key2=s1.key1), with index |
| condition: (cast(s1.key1 as double) = cast(s2.key2 as double)) (cost=0.25 rows=1) |
| 1 row in set, 1 warning (0.00 sec) |
| 可以通过MySQL Workbench可视化查看MySQL的执行计划。通过点击Workbench的放大镜图标,即可生成可视化的查询计划 |
| |
| EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT NULL; |
| |
| SHOW WARNINGS\G |
| OPTIMIZER_TRACE是MySQL5.6引入的一项跟踪功能,它可以跟踪优化器做出的各种决策(比如访问表的方法、各种开销计算、各种转换等), |
| 并将跟踪结果记录到INFORMATION_SCHEMA.OPTIMIZER_TRACE表中。 |
| |
| 此功能默认关闭。开启trace,并设置格式为JsON,同时设置trace最大能够使用的内存大小,避免解析过程中因为默认内存过小而不能够完整展示 |
| |
| SET OPTIMIZER_TRACE="enabled=on",end_markers_in_json=on; |
| SET OPTIMIZER_TRACE_MAX_MEN_SIZE=1000000; |
| |
| # 测试语句 |
| select * from student where id < 10; |
| |
| # 查询information_schema.optimizer_trace 就可以知道MysQL是如何执行sQL |
| select * from information_schema.optimizer_trace |
- MySQL监控分析视图-sys schema
- Sys schema视图摘要
| 1. 主机相关:以host_summary开头,主要汇总了IO延迟的信息。 |
| 2. Innodb相关:以innodb开头,汇总了innodb buffer信息和事务等待innodb锁的信息。 |
| 3. I/o相关:以io开头,汇总了等待I/O、I/O使用量情况。 |
| 4. 内存使用情况:以memory开头,从主机、线程、事件等角度展示内存的使用情况 |
| 5. 连接与会话信息:processlist和session相关视图,总结了会话相关信息。 |
| 6. 表相关:以schema_table开头的视图,展示了表的统计信息。 |
| 7. 索引信息:统计了索引的使用情况,包含冗余索引和未使用的索引情况。 |
| 8. 语句相关:以statement开头,包含执行全表扫描、使用临时表、排序等的语句信息。 |
| 9. 用户相关:以user开头的视图,统计了用户使用的文件I/O、执行语句统计信息。 |
| 10. 等待事件相关信息:以wait开头,展示等待事件的延迟情况。 |
| #1. 查询冗余索引 |
| select * from sys.schema_redundant_indexes; |
| |
| #2. 查询未使用过的索引 |
| select * from sys.schema_unused_indexes; |
| |
| #3. 查询索引的使用情况 |
| select index_name,rows_selected,rows_inserted,rows_updated,rows_deleted |
| from sys.schema_index_statistics where table_schema='dbname' ; |
| # 1. 查询表的访问量 |
| select table_schema,table_name,sum(io_read_requests+io_write_requests) as io from |
| sys.schema_table_statistics group by table_schema,table_name order by io desc; |
| |
| # 2. 查询占用bufferpool较多的表 |
| select object_schema,object_name,allocated,data |
| from sys.innodb_buffer_stats_by_table order by allocated limit 10; |
| |
| # 3. 查看表的全表扫描情况 |
| select * from sys.statements_with_full_table_scans where db='dbname'; |
| #1. 监控SQL执行的频率 |
| select db,exec_count,query from sys.statement_analysis |
| order by exec_count desc; |
| |
| #2. 监控使用了排序的SQL |
| select db,exec_count,first_seen,last_seen,query |
| from sys.statements_with_sorting limit 1; |
| |
| #3. 监控使用了临时表或者磁盘临时表的SQL |
| select db,exec_count,tmp_tables,tmp_disk_tables,query |
| from sys.statement_analysis where tmp_tables>0 or tmp_disk_tables >0 |
| order by (tmp_tables+tmp_disk_tables) desc; |
| #1. 查看消耗磁盘IO的文件 |
| select file,avg_read,avg_write,avg_read+avg_write as avg_io |
| from sys.io_global_by_file_by_bytes order by avg_read limit 10; |
| #1. 行锁阻塞情况 |
| select * from sys.innodb_lock_waits; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-06-15 MySQL基础(二)