0%

mysql之执行计划

一日之计在于晨,一年之计在于春,一生之计在于勤。

一、explain

  1. 使用 explain SQL语句;

    • 不单单select,insert/delete/update语句都可使用
  2. 返回

1
2
3
4
5
6
7
8
9
10
11
12
           id: 1
select_type: SIMPLE
table: table_multi_union_index
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4
filtered: 100.00
Extra: NULL
  1. 作用
    • 查看SQL索引使用情况
    • 查看联接查询执行顺序
    • 查询扫描的数据行数

二、profiling

  1. 查看profiling状态 show variables like 'profiling';,默认关闭

  2. 开启profiling set profiling=1,接下来写query语句都会被记录

  3. 查看所有profiling show profiles;

  4. 查看profiling show profile [type] id for query [ID];,其中type值可以为:

    • all:显示示所有的开销信息
    • block io:显示块IO相关开销
    • context switches:上下文切换相关开销
    • cpu:显示CPU相关开销信息
    • ipc:显示发送和接收相关开销信息
    • memory:显示内存相关开销信息
    • page faults:显示页面错误相关开销信息
    • source:显示和Source_function,Source_file,Source_line相关的开销信息
    • swaps:显示交换次数相关开销的信息
  5. 作用:记录SQL语句资源开销,如IO,上下文切换,CPU,Memory等

三、optimizer_trace

  1. 查看optimizer_trace状态 show variables like 'optimizer_trace';,默认enabled=off,one_line=off
  2. 开启optimizer_trace set optimizer_trace='enabled=on';
    • set optimizer_trace="enabled=on",end_markers_in_json=on;
  3. 查询optimizer_trace表 select trace from information_schema.optimizer_trace\G;
  4. 导入文件,通过工具查看 select trace into dumpfile 'test.trace' from information_schema.optimizer_trace\G;
    • ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execute this statement,查看show variables like 'secure_file_priv';,将此值更改为某个路径或置为空即可(需要修改my.cnf,命令行不可修改)
      • secure_file_priv为 NULL 时,表示限制mysqld不允许导入或导出。
      • secure_file_priv为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
      • secure_file_priv没有值时,表示不限制mysqld在任意目录的导入导出。

四、参考

  1. optimizer-trace