MySQL泛泛而谈(三)

 三、查询截取分析

1-查询优化

①小表驱动大表

通常SQL调优过程:(面试问:平时是咋样进行SQL优化的?)

  1. 观察,至少跑1天,看看生产的慢SQL情况。
  2. 开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL,并将它抓取出来。(找出慢SQL)
  3. explain + 慢SQL分析。
  4. show profile。
  5. 运维经理 or DBA,进行SQL数据库服务器的参数调优。

总结:

  1. 慢查询的开启并捕获
  2. explain + 慢SQL分析
  3. show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况
  4. SQL数据库服务器的参数调优。

优化原则:小表驱动大表,即小的数据集驱动大的数据集。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-java"><span style="color:#0000ff">for</span>(<span style="color:#a31515">int</span> i=<span style="color:#880000">0</span>;i<<span style="color:#880000">5</span>;i++){
    <span style="color:#0000ff">for</span>(<span style="color:#a31515">int</span> j=<span style="color:#880000">0</span>;j<<span style="color:#880000">1000</span>;j++){
        ...
    }
}
====================
<span style="color:#0000ff">for</span>(<span style="color:#a31515">int</span> i=<span style="color:#880000">0</span>;i<<span style="color:#880000">1000</span>;i++){
    <span style="color:#0000ff">for</span>(<span style="color:#a31515">int</span> j=<span style="color:#880000">0</span>;j<<span style="color:#880000">5</span>;j++){
        ...
    }
}
</code></span></span>

类似上述两个for循环,尽量选择上面的那种。数据库最耗时的是多表之间关系的建立。第一种:相当于两张表建立了5次连接;第二种:相当于两张表建立了1000次连接。也就是说被嵌套在里面的应该是小表!(因为是里面嵌套的先执行,相当于被嵌套在里面的SQL是外层for循环)

RBO原理

当B表的数据集小于A表的数据集时,用in优于exists。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> A <span style="color:#0000ff">where</span> id <span style="color:#0000ff">in</span> (<span style="color:#0000ff">select</span> id <span style="color:#0000ff">from</span> B)
等价于:
<span style="color:#0000ff">for</span> <span style="color:#0000ff">select</span> id <span style="color:#0000ff">from</span> B
<span style="color:#0000ff">for</span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> A <span style="color:#0000ff">where</span> A.id <span style="color:#ab5656">=</span> B.id
</code></span></span>

当B表的数据集大于A表的数据集时,用exists优于in。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> A <span style="color:#0000ff">where</span> <span style="color:#0000ff">exists</span> (<span style="color:#0000ff">select</span> <span style="color:#880000">1</span> <span style="color:#0000ff">from</span> B <span style="color:#0000ff">where</span> B.id <span style="color:#ab5656">=</span> A.id)
等价于:
先:<span style="color:#0000ff">for</span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> A  
后:<span style="color:#0000ff">for</span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> B <span style="color:#0000ff">where</span> B.id <span style="color:#ab5656">=</span> A.id
</code></span></span>

注意:A表与B表的ID字段应建立索引。

EXISTS关键字
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">SELECT</span> ...<span style="color:#0000ff">FROM</span> <span style="color:#0000ff">table</span> <span style="color:#0000ff">WHERE</span> <span style="color:#0000ff">EXISTS</span> (subquery)
</code></span></span>

该语法可以理解为:先将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留。

提示

  1. EXSTS(subquey)只返回TRUE或FALSE,因此子查询中的SELECT * 也可以是 SELECT 1 或select ‘X’,官方说法是实际执行时会忽略SELECT清单,因此没有区别。
  2. EXISTS子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。
  3. EXISTS子查询往往也可以用条件表达式,其他子查询或者JOIN来替代,何种最优需要具体问题具体分析

②in和exists

示例表:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp;
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> NAME <span style="color:#ab5656">|</span> deptId <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> z5   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> w5   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> w6   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> s7   <span style="color:#ab5656">|</span>      <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> s8   <span style="color:#ab5656">|</span>      <span style="color:#880000">4</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">8</span> <span style="color:#ab5656">|</span> s9   <span style="color:#ab5656">|</span>     <span style="color:#880000">51</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#880000">8</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.02</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_dept;
<span style="color:#ab5656">+</span><span style="color:#008000">----+----------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> deptName <span style="color:#ab5656">|</span> locAdd <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+----------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> RD       <span style="color:#ab5656">|</span> <span style="color:#880000">11</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> HR       <span style="color:#ab5656">|</span> <span style="color:#880000">12</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> MK       <span style="color:#ab5656">|</span> <span style="color:#880000">13</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> MIS      <span style="color:#ab5656">|</span> <span style="color:#880000">14</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> FD       <span style="color:#ab5656">|</span> <span style="color:#880000">15</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+----------+--------+</span>
<span style="color:#880000">5</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.01</span> sec)
</code></span></span>

in和exists用法

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp e <span style="color:#0000ff">where</span> e.deptId <span style="color:#0000ff">in</span> (<span style="color:#0000ff">select</span> id <span style="color:#0000ff">from</span> tbl_dept d);
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> NAME <span style="color:#ab5656">|</span> deptId <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> z5   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> w5   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> w6   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> s7   <span style="color:#ab5656">|</span>      <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> s8   <span style="color:#ab5656">|</span>      <span style="color:#880000">4</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#880000">7</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp e <span style="color:#0000ff">where</span> <span style="color:#0000ff">exists</span> (<span style="color:#0000ff">select</span> <span style="color:#880000">1</span> <span style="color:#0000ff">from</span> tbl_dept d <span style="color:#0000ff">where</span> d.id <span style="color:#ab5656">=</span> e.deptId);
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> NAME <span style="color:#ab5656">|</span> deptId <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> z5   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> w5   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> w6   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> s7   <span style="color:#ab5656">|</span>      <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> s8   <span style="color:#ab5656">|</span>      <span style="color:#880000">4</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#880000">7</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)
#<span style="color:#a31515">'X'</span>就是表示一个常量,是一个常量就行了,反正返回的就是<span style="color:#a31515">true</span><span style="color:#ab5656">/</span><span style="color:#a31515">false</span>
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp e <span style="color:#0000ff">where</span> <span style="color:#0000ff">exists</span> (<span style="color:#0000ff">select</span> <span style="color:#a31515">'X'</span> <span style="color:#0000ff">from</span> tbl_dept d <span style="color:#0000ff">where</span> d.id <span style="color:#ab5656">=</span> e.deptId);
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> NAME <span style="color:#ab5656">|</span> deptId <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> z5   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> w5   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> w6   <span style="color:#ab5656">|</span>      <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> s7   <span style="color:#ab5656">|</span>      <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> s8   <span style="color:#ab5656">|</span>      <span style="color:#880000">4</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+--------+</span>
<span style="color:#880000">7</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)
</code></span></span>

③为排序使用索引OrderBy优化

ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序。

新建SQL

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">create</span> <span style="color:#0000ff">table</span> tblA(
    #id <span style="color:#a31515">int</span> <span style="color:#0000ff">primary</span> key <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> auto_increment,
    age <span style="color:#a31515">int</span>,
    birth <span style="color:#a31515">timestamp</span> <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span>
);

<span style="color:#0000ff">insert</span> <span style="color:#0000ff">into</span> tblA(age, birth) <span style="color:#0000ff">values</span>(<span style="color:#880000">22</span>, now());
<span style="color:#0000ff">insert</span> <span style="color:#0000ff">into</span> tblA(age, birth) <span style="color:#0000ff">values</span>(<span style="color:#880000">23</span>, now());
<span style="color:#0000ff">insert</span> <span style="color:#0000ff">into</span> tblA(age, birth) <span style="color:#0000ff">values</span>(<span style="color:#880000">24</span>, now());

<span style="color:#0000ff">create</span> index idx_A_ageBirth <span style="color:#0000ff">on</span> tblA(age, birth);
</code></span></span>

查看验证:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tblA;
<span style="color:#ab5656">+</span><span style="color:#008000">------+---------------------+</span>
<span style="color:#ab5656">|</span> age  <span style="color:#ab5656">|</span> birth               <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">------+---------------------+</span>
<span style="color:#ab5656">|</span>   <span style="color:#880000">22</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-04</span> <span style="color:#880000">19</span>:<span style="color:#880000">31</span>:<span style="color:#880000">45</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>   <span style="color:#880000">23</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-04</span> <span style="color:#880000">19</span>:<span style="color:#880000">31</span>:<span style="color:#880000">45</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>   <span style="color:#880000">24</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-04</span> <span style="color:#880000">19</span>:<span style="color:#880000">31</span>:<span style="color:#880000">45</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">------+---------------------+</span>
<span style="color:#880000">3</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> index <span style="color:#0000ff">from</span> tblA;
</code></span></span>

分析SQL 重点在于会不会产生UsingFileSort

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">where</span> age <span style="color:#ab5656">></span> <span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> age;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">where</span> age<span style="color:#ab5656">></span><span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> age,birth;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">where</span> age<span style="color:#ab5656">></span><span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> birth;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">where</span> age<span style="color:#ab5656">></span><span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> birth,age;
</code></span></span>

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> birth;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">WHERE</span> birth <span style="color:#ab5656">></span> <span style="color:#a31515">'2016-01-28 00:00:00'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> birth;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">WHERE</span> birth <span style="color:#ab5656">></span> <span style="color:#a31515">'2016-01-28 00:00:00'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> age;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tblA <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> age, birth <span style="color:#0000ff">desc</span>;
</code></span></span>

最后一种情况:尽管order by的顺序和创建索引的顺序保持一致,但是由于order by默认的是升序,而DESC是降序,MySQL建立索引的顺序默认的就是升序,现在需要降序,用不上了,那么MySQL只有产生一次内部排序了。

MySQL支持二种方式的排序,FileSort和lIndex,Index效率高,它指MySQL扫描索引本身完成排序。FileSort方式效率较低。

结论:ORDER BY满足两情况,会使用Index方式排序:

  1. ORDER BY语句使用索引最左前列。
  2. 使用where子句与Order BY子句条件列组合满足索引最左前列。

④MySQL的Filesort

如果Order by查询的列不在索引列上,MySQL的Filesort有两种算法:

1)双路排序

MySQL4.1之前是使用双路排序,字面意思就是两次扫描磁盘,最终得到数据,读取行指针和OrderBy列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读对应的数据输出。

从磁盘取排序字段,在buffer进行排序,再从磁盘取其他字段。

取一批数据,要对磁盘进行了两次扫描,众所周知,I\O是很耗时的,所以在mysql4.1之后,出现了第二种改进的算法,就是单路排序。

2)单路排序

从磁盘读取查询需要的所有列,按照order by列在buffer对它们进行排序,然后扫描排序压的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。

结论及引申出的问题

  • 由于单路是后出的,总体而言好过双路

  • 但是用单路有问题

在sort_buffer(在my.cnf中有配置缓冲区大小)中,方法B比方法A要多占用很多空间,因为方法B是把所有字段都取出,所以有可能取出的数据的总大小超出了sort_buffer的容量,导致每次只能取sort_buffer容量大小的数据,进行排序(创建tmp文件,多路合并),排完再取取

sort_buffer容量大小,再排……从而多次I/O。(类比于缓冲区大小不够,那只有取多次了

本来想省一次I/O操作,反而导致了大量的I/O操作,反而得不偿失。

⑤优化策略

  • 增大sort_buffer_size参数的设置
  • 增大max_length_for_sort_data参数的设置

为什么设置sort_buffer_size、max_length_for_sort_data参数能优化排序?

提高Order By的速度:

  1. Order by时select * 是一个大忌只Query需要的字段,这点非常重要(很容易把缓冲区占满)。在这里的影响是;

    • 当Query的字段大小总和小于max_length_for_sort_data而且排序字段不是TEXT|BLOB类型时,会用改进后的算法——单路排序,否则用老算法——多路排序。

    • 两种算法的数据都有可能超出sort_buffer的容量,超出之后,会创建临时tmp文件进行合并排序,导致多次IO,但是用单路排序算法的风险会更大一些,所以要提高sort_buffer__size。

  2. 尝试提高sort_buffer_size,不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的。

  3. 尝试提高max_length_for_sort_data,提高这个参数,会增加用改进算法的概率。但是如果设的太高,数据总容量超出sort_buffer_size的概率就增大,明显症状是高的磁盘I/O活动和低的处理器使用率。

⑥索引和Order by小结

为排序使用索引

  • MySql两种排序方式∶文件排序 或 扫描有序索引排序
  • MySql能为 排序 与 查询 使用相同的索引

创建复合索引 a_b_c (a, b, c)

order by能使用索引最左前缀

  • ORDER BY a
  • ORDER BY a, b
  • ORDER BY a, b, c
  • ORDER BY a DESC, b DESC, c DESC (都是升序或都是降序)

如果WHERE使用素引的最左前缀定义为常量,则order by能使用索引(不产生FileSort

  • WHERE a = const ORDER BY b,c
  • WHERE a = const AND b = const ORDER BY c
  • WHERE a = const ORDER BY b, c
  • WHERE a = const AND b > const ORDER BY b, c 这里虽然是>但是依旧是一个常量

不能使用索引进行排序

  • ORDER BY a ASC, b DESC, c DESC //排序不—致
  • WHERE g = const ORDER BY b, c //产丢失a索引
  • WHERE a = const ORDER BY c //中间兄弟断了 产丢失b索引
  • WHERE a = const ORDER BY a, d //d不是素引的一部分
  • WHERE a in (…) ORDER BY b, c //对于排序来说,多个相等条件也是范围查询 不是常量

2-GroupBy优化

GroupBy优化

  • group by实质是先排序后进行分组,遵照索引建的最佳左前缀。
  • 当无法使用索引列,增大max_length_for_sort_data参数的设置 + 增大sort_buffer_size参数的设置。
  • where高于having,能写在where限定的条件就不要去having限定了。

3-慢查询日志

  • MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
  • 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
  • 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析。

①如何操作

默认情况下,MySQL数据库没有开启慢查询日速,需要我们手动来设置这个参数

当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。

1)查看是否开启及如何开启
  • 默认 - SHOW VARIABLES LIKE '%slow_query_log%';
  • 一次性开启 - set global slow_query_log=1;,只对当前数据库生效,如果MySQL重启后则会失效。只针对本次生效。
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SHOW</span> VARIABLES <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%slow_query_log%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#ab5656">|</span> Variable_name       <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span>                    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#ab5656">|</span> slow_query_log      <span style="color:#ab5656">|</span> OFF                      <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> slow_query_log_file <span style="color:#ab5656">|</span> localhost<span style="color:#ab5656">-</span>slow.log       <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#880000">2</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">set</span> <span style="color:#0000ff">global</span> slow_query_log<span style="color:#ab5656">=</span><span style="color:#880000">1</span>;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SHOW</span> VARIABLES <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%slow_query_log%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#ab5656">|</span> Variable_name       <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span>                    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#ab5656">|</span> slow_query_log      <span style="color:#ab5656">|</span> <span style="color:#0000ff">ON</span>                       <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> slow_query_log_file <span style="color:#ab5656">|</span> localhost<span style="color:#ab5656">-</span>slow.log       <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------+--------------------------+</span>
<span style="color:#880000">2</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>

如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)

修改my.cnf文件,[mysqld]下增加或修改参数slow_query_log和slow_query_log_file后,然后重启MySQL服务器。也即将如下两行配置进my.cnf文件

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">slow_query_log <span style="color:#ab5656">=</span><span style="color:#880000">1</span>slow_query_log_file<span style="color:#ab5656">=</span><span style="color:#ab5656">/</span>var<span style="color:#ab5656">/</span>lib<span style="color:#ab5656">/</span>mycoderxz<span style="color:#ab5656">-</span>slow.log
</code></span></span>

关于慢查询的参数slow_query_log_file,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.log(如果没有指定参数slow_query_log_file的话)

2)开启了慢查询日志

什么样的SQL才会记录到慢查询日志里面呢?

这个是由参数long_query_time控制,默认情况下long_query_time的值为10秒,命令:SHOW VARIABLES LIKE 'long_query_time%';

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SHOW</span> VARIABLES <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'long_query_time%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> Variable_name   <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> long_query_time <span style="color:#ab5656">|</span> <span style="color:#880000">10.000000</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>

可以使用命令修改,也可以在my.cnf参数里面修改。

假如运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。

3)设置慢SQL阈值时间:

set global long_query_time=3;

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SHOW</span> VARIABLES <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'long_query_time%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> Variable_name   <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> long_query_time <span style="color:#ab5656">|</span> <span style="color:#880000">10.000000</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">set</span> <span style="color:#0000ff">global</span> long_query_time<span style="color:#ab5656">=</span><span style="color:#880000">3</span>;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SHOW</span> VARIABLES <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'long_query_time%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> Variable_name   <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#ab5656">|</span> long_query_time <span style="color:#ab5656">|</span> <span style="color:#880000">10.000000</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">-----------------+-----------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>

为什么设置后看不出变化?

需要重新连接或新开一个会话才能看到修改值。

4)记录慢SQL并后续分析

假设我们成功设置慢SQL阈值时间为3秒(set global long_query_time=3;)。

模拟超时SQL:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SELECT</span> sleep(<span style="color:#880000">4</span>);
<span style="color:#ab5656">+</span><span style="color:#008000">----------+</span>
<span style="color:#ab5656">|</span> sleep(<span style="color:#880000">4</span>) <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------+</span>
<span style="color:#ab5656">|</span>        <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">4.00</span> sec)
</code></span></span>

日志记录:

查询当前系统中有多少条慢查询记录

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> <span style="color:#0000ff">global</span> status <span style="color:#0000ff">like</span> <span style="color:#a31515">'%Slow_queries%'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> Variable_name <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> Slow_queries  <span style="color:#ab5656">|</span> <span style="color:#880000">1</span>     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)
</code></span></span>

在配置文件中设置慢SQL阈值时间 永久生效!

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">#[mysqld]下配置:
slow_query_log<span style="color:#ab5656">=</span><span style="color:#880000">1</span>;
slow_query_log_file<span style="color:#ab5656">=</span><span style="color:#ab5656">/</span>var<span style="color:#ab5656">/</span>lib<span style="color:#ab5656">/</span>mysql<span style="color:#ab5656">/</span>atguigu<span style="color:#ab5656">-</span>slow.log
long_query_time<span style="color:#ab5656">=</span><span style="color:#880000">3</span>;
log_output<span style="color:#ab5656">=</span>FILE;
</code></span></span>

②日志分析工具mysqldumpslow

在生产环境中,如果要手工分析日志,查找、分析SQL,显然是个体力活,MySQL提供了日志分析工具mysqldumpslow。

查看mysqldumpslow的帮助信息,mysqldumpslow --help。

  • s:是表示按照何种方式排序
  • c:访问次数
  • l:锁定时间
  • r:返回记录
  • t:查询时间
  • al:平均锁定时间
  • ar:平均返回记录数
  • at:平均查询时间
  • t:即为返回前面多少条的数据
  • g:后边搭配一个正则匹配模式,大小写不敏感的

工作常用参考

  • 得到返回记录集最多的10个SQL
    • mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
  • 得到访问次数最多的10个SQL
    • mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
  • 得到按照时间排序的前10条里面含有左连接的查询语句
    • mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log
  • 另外建议在使用这些命令时结合│和more 使用,否则有可能出现爆屏情况 (也可以结合管道把结果写到一个文件里面
    • mysqldumpslow -s r-t 10 /ar/lib/mysql/atguigu-slow.log | more

3-批量插入数据脚本(存储过程)

创建SQL

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">create</span> database bigData;
use bigData;

<span style="color:#0000ff">CREATE</span> <span style="color:#0000ff">TABLE</span> dept(
	id <span style="color:#a31515">INT</span> UNSIGNED <span style="color:#0000ff">PRIMARY</span> KEY AUTO_INCREMENT,
	deptno MEDIUMINT UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span> <span style="color:#880000">0</span>,
	dname <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">20</span>)<span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span> "",
	loc <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">13</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span> ""
)ENGINE<span style="color:#ab5656">=</span>INNODB <span style="color:#0000ff">DEFAULT</span> CHARSET<span style="color:#ab5656">=</span>utf8;

<span style="color:#0000ff">CREATE</span> <span style="color:#0000ff">TABLE</span> emp(
    id <span style="color:#a31515">int</span> unsigned <span style="color:#0000ff">primary</span> key auto_increment,
    empno mediumint unsigned <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>,
    ename <span style="color:#a31515">varchar</span>(<span style="color:#880000">20</span>) <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> <span style="color:#0000ff">default</span> "",
    job <span style="color:#a31515">varchar</span>(<span style="color:#880000">9</span>) <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> <span style="color:#0000ff">default</span> "",
    mgr mediumint unsigned <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>,
    hiredate <span style="color:#a31515">date</span> <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span>,
    sal <span style="color:#a31515">decimal</span>(<span style="color:#880000">7</span>,<span style="color:#880000">2</span>) <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span>,
    comm <span style="color:#a31515">decimal</span>(<span style="color:#880000">7</span>,<span style="color:#880000">2</span>) <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span>,
    deptno mediumint unsigned <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>
)ENGINE<span style="color:#ab5656">=</span>INNODB <span style="color:#0000ff">DEFAULT</span> CHARSET<span style="color:#ab5656">=</span>utf8;
</code></span></span>

②设置参数log_bin_trust_function_creators

创建函数,假如报错:This function has none of DETERMINISTIC…

由于开启过慢查询日志,因为我们开启了bin-log,我们就必须为我们的function指定一个参数。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">show</span> variables <span style="color:#0000ff">like</span> <span style="color:#a31515">'log_bin_trust_function_creators'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------------------+-------+</span>
<span style="color:#ab5656">|</span> Variable_name                   <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------------------+-------+</span>
<span style="color:#ab5656">|</span> log_bin_trust_function_creators <span style="color:#ab5656">|</span> OFF   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------------------------+-------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.02</span> sec)
<span style="color:#0000ff">set</span> <span style="color:#0000ff">global</span> log_bin_trust_function_creators<span style="color:#ab5656">=</span><span style="color:#880000">1</span>;
</code></span></span>

这样添加了参数以后,如果mysqld重启,上述参数又会消失,永久方法:

  • windows下my.ini[mysqld]加上log_bin_trust_function_creators=1

  • linux下/etc/my.cnf 下my.cnf[mysqld]加上log_bin_trust_function_creators=1

③创建函数,保证每条数据都不同

1)随机产生字符串

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">delimiter $$ # 两个 $$ 表示结束
<span style="color:#0000ff">create</span> <span style="color:#0000ff">function</span> rand_string(n <span style="color:#a31515">int</span>) <span style="color:#0000ff">returns</span> <span style="color:#a31515">varchar</span>(<span style="color:#880000">255</span>)
<span style="color:#0000ff">begin</span>
    <span style="color:#0000ff">declare</span> chars_str <span style="color:#a31515">varchar</span>(<span style="color:#880000">100</span>) <span style="color:#0000ff">default</span> <span style="color:#a31515">'abcdefghijklmnopqrstuvwxyz'</span>;
    <span style="color:#0000ff">declare</span> return_str <span style="color:#a31515">varchar</span>(<span style="color:#880000">255</span>) <span style="color:#0000ff">default</span> <span style="color:#a31515">''</span>; #定义返回值变量
    <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    while i <span style="color:#ab5656"><</span> n do
        #concat函数连接字符串
        <span style="color:#0000ff">set</span> return_str <span style="color:#ab5656">=</span> concat(return_str,<span style="color:#0000ff">substring</span>(chars_str,<span style="color:#0000ff">floor</span>(<span style="color:#880000">1</span><span style="color:#ab5656">+</span>rand()<span style="color:#ab5656">*</span><span style="color:#880000">52</span>),<span style="color:#880000">1</span>));
        <span style="color:#0000ff">set</span> i<span style="color:#ab5656">=</span>i<span style="color:#ab5656">+</span><span style="color:#880000">1</span>;
    <span style="color:#0000ff">end</span> while;
    <span style="color:#0000ff">return</span> return_str;
<span style="color:#0000ff">end</span> $$
</code></span></span>

2)随机产生部门编号

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">delimiter $$
<span style="color:#0000ff">create</span> <span style="color:#0000ff">function</span> rand_num() <span style="color:#0000ff">returns</span> <span style="color:#a31515">int</span>(<span style="color:#880000">5</span>)
<span style="color:#0000ff">begin</span>
    <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    <span style="color:#0000ff">set</span> i<span style="color:#ab5656">=</span><span style="color:#0000ff">floor</span>(<span style="color:#880000">100</span><span style="color:#ab5656">+</span>rand()<span style="color:#ab5656">*</span><span style="color:#880000">10</span>);
    <span style="color:#0000ff">return</span> i;
<span style="color:#0000ff">end</span> $$
</code></span></span>

运行结果

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> delimiter $$ # 声明两个 $$ 表示结束
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">create</span> <span style="color:#0000ff">function</span> rand_string(n <span style="color:#a31515">int</span>) <span style="color:#0000ff">returns</span> <span style="color:#a31515">varchar</span>(<span style="color:#880000">255</span>)
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">begin</span>
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">declare</span> chars_str <span style="color:#a31515">varchar</span>(<span style="color:#880000">100</span>) <span style="color:#0000ff">default</span> <span style="color:#a31515">'abcdefghijklmnopqrstuvwxyz'</span>;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">declare</span> return_str <span style="color:#a31515">varchar</span>(<span style="color:#880000">255</span>) <span style="color:#0000ff">default</span> <span style="color:#a31515">''</span>;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     while i <span style="color:#ab5656"><</span> n do
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>         <span style="color:#0000ff">set</span> return_str <span style="color:#ab5656">=</span> concat(return_str,<span style="color:#0000ff">substring</span>(chars_str,<span style="color:#0000ff">floor</span>(<span style="color:#880000">1</span><span style="color:#ab5656">+</span>rand()<span style="color:#ab5656">*</span><span style="color:#880000">52</span>),<span style="color:#880000">1</span>));
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>         <span style="color:#0000ff">set</span> i<span style="color:#ab5656">=</span>i<span style="color:#ab5656">+</span><span style="color:#880000">1</span>;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">end</span> while;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">return</span> return_str;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">end</span> $$
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> rand_string(<span style="color:#880000">2</span>);
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> ;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> $$
<span style="color:#ab5656">+</span><span style="color:#008000">----------------+</span>
<span style="color:#ab5656">|</span> rand_string(<span style="color:#880000">2</span>) <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------------+</span>
<span style="color:#ab5656">|</span> af             <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> delimiter $$
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">create</span> <span style="color:#0000ff">function</span> rand_num() <span style="color:#0000ff">returns</span> <span style="color:#a31515">int</span>(<span style="color:#880000">5</span>)
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">begin</span>
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">set</span> i<span style="color:#ab5656">=</span><span style="color:#0000ff">floor</span>(<span style="color:#880000">100</span><span style="color:#ab5656">+</span>rand()<span style="color:#ab5656">*</span><span style="color:#880000">10</span>);
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span>     <span style="color:#0000ff">return</span> i;
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">end</span> $$
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> rand_num()$$
<span style="color:#ab5656">+</span><span style="color:#008000">------------+</span>
<span style="color:#ab5656">|</span> rand_num() <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">------------+</span>
<span style="color:#ab5656">|</span>        <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">------------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)
</code></span></span>

④创建存储过程

创建往emp表中插入数据的存储过程

注意:设置autocommit设置为0;

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">delimiter $$
<span style="color:#0000ff">create</span> <span style="color:#0000ff">procedure</span> insert_emp(<span style="color:#0000ff">in</span> <span style="color:#0000ff">start</span> <span style="color:#a31515">int</span>(<span style="color:#880000">10</span>),<span style="color:#0000ff">in</span> max_num <span style="color:#a31515">int</span>(<span style="color:#880000">10</span>))#没有返回值
<span style="color:#0000ff">begin</span>
    <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    <span style="color:#0000ff">set</span> autocommit <span style="color:#ab5656">=</span> <span style="color:#880000">0</span>;#把自动提交设置为<span style="color:#880000">0</span> ,默认是写一次提交一次,需要批处理只提交一次
    repeat
        <span style="color:#0000ff">set</span> i <span style="color:#ab5656">=</span> i<span style="color:#ab5656">+</span><span style="color:#880000">1</span>;
        <span style="color:#0000ff">insert</span> <span style="color:#0000ff">into</span> emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) <span style="color:#0000ff">values</span>((<span style="color:#0000ff">start</span><span style="color:#ab5656">+</span>i),rand_string(<span style="color:#880000">6</span>),<span style="color:#a31515">'salesman'</span>,<span style="color:#880000">0001</span>,curdate(),<span style="color:#880000">2000</span>,<span style="color:#880000">400</span>,rand_num());
        until i<span style="color:#ab5656">=</span>max_num
        <span style="color:#0000ff">end</span> repeat;
    <span style="color:#0000ff">commit</span>;#注意要<span style="color:#0000ff">commit</span>
<span style="color:#0000ff">end</span> $$
</code></span></span>

创建往dept表中插入数据的存储过程

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">delimiter $$
<span style="color:#0000ff">create</span> <span style="color:#0000ff">procedure</span> insert_dept(<span style="color:#0000ff">in</span> <span style="color:#0000ff">start</span> <span style="color:#a31515">int</span>(<span style="color:#880000">10</span>),<span style="color:#0000ff">in</span> max_num <span style="color:#a31515">int</span>(<span style="color:#880000">10</span>))
<span style="color:#0000ff">begin</span>
    <span style="color:#0000ff">declare</span> i <span style="color:#a31515">int</span> <span style="color:#0000ff">default</span> <span style="color:#880000">0</span>;
    <span style="color:#0000ff">set</span> autocommit <span style="color:#ab5656">=</span> <span style="color:#880000">0</span>;
    repeat
        <span style="color:#0000ff">set</span> i <span style="color:#ab5656">=</span> i<span style="color:#ab5656">+</span><span style="color:#880000">1</span>;
        <span style="color:#0000ff">insert</span> <span style="color:#0000ff">into</span> dept(deptno,dname,loc) <span style="color:#0000ff">values</span>((<span style="color:#0000ff">start</span><span style="color:#ab5656">+</span>i),rand_string(<span style="color:#880000">10</span>),rand_string(<span style="color:#880000">8</span>));
        until i<span style="color:#ab5656">=</span>max_num
        <span style="color:#0000ff">end</span> repeat;
    <span style="color:#0000ff">commit</span>;
<span style="color:#0000ff">end</span> $$
</code></span></span>

⑤调用存储过程

往dept表中插入数据

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> DELIMITER ;#恢复为;作为结束符号,上面改为了$$
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">CALL</span> insert_dept(<span style="color:#880000">100</span>, <span style="color:#880000">10</span>);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
</code></span></span>

往emp表中插入50万数据

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> DELIMITER ;
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">CALL</span> insert_emp(<span style="color:#880000">100001</span>, <span style="color:#880000">500000</span>);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">27.00</span> sec)
</code></span></span>

运行结果

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> dept;
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+---------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> deptno <span style="color:#ab5656">|</span> dname   <span style="color:#ab5656">|</span> loc    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+---------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">101</span> <span style="color:#ab5656">|</span> mqgfy   <span style="color:#ab5656">|</span> ck     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span> wgighsr <span style="color:#ab5656">|</span> kbq    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">103</span> <span style="color:#ab5656">|</span> gjgdyj  <span style="color:#ab5656">|</span> brb    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">104</span> <span style="color:#ab5656">|</span> gzfug   <span style="color:#ab5656">|</span> p      <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span> keitu   <span style="color:#ab5656">|</span> cib    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span> nndvuv  <span style="color:#ab5656">|</span> csue   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span> cdudl   <span style="color:#ab5656">|</span> tw     <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">8</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span> aafyea  <span style="color:#ab5656">|</span> aqq    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">9</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span> zuqezjx <span style="color:#ab5656">|</span> dpqoyo <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">10</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">110</span> <span style="color:#ab5656">|</span> pam     <span style="color:#ab5656">|</span> cses   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+---------+--------+</span>
<span style="color:#880000">10</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> emp limit <span style="color:#880000">20</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> empno  <span style="color:#ab5656">|</span> ename <span style="color:#ab5656">|</span> job      <span style="color:#ab5656">|</span> mgr <span style="color:#ab5656">|</span> hiredate   <span style="color:#ab5656">|</span> sal     <span style="color:#ab5656">|</span> comm   <span style="color:#ab5656">|</span> deptno <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100002</span> <span style="color:#ab5656">|</span> xmbva <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100003</span> <span style="color:#ab5656">|</span> aeq   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100004</span> <span style="color:#ab5656">|</span> cnjfz <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100005</span> <span style="color:#ab5656">|</span> wwhd  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">100</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100006</span> <span style="color:#ab5656">|</span> e     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100007</span> <span style="color:#ab5656">|</span> yjfr  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100008</span> <span style="color:#ab5656">|</span> xlp   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">8</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100009</span> <span style="color:#ab5656">|</span> mp    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">9</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100010</span> <span style="color:#ab5656">|</span> tcdl  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">10</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100011</span> <span style="color:#ab5656">|</span> akw   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">11</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100012</span> <span style="color:#ab5656">|</span> re    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">12</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100013</span> <span style="color:#ab5656">|</span> qip   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">13</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100014</span> <span style="color:#ab5656">|</span> bvaf  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">14</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100015</span> <span style="color:#ab5656">|</span> g     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">15</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100016</span> <span style="color:#ab5656">|</span> qt    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">16</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100017</span> <span style="color:#ab5656">|</span> bzy   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">17</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100018</span> <span style="color:#ab5656">|</span> gf    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">18</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100019</span> <span style="color:#ab5656">|</span> r     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">19</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100020</span> <span style="color:#ab5656">|</span> ydokg <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">100</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">20</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100021</span> <span style="color:#ab5656">|</span> ee    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#880000">20</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.00</span> sec)
</code></span></span>

4-用Show Profile进行SQL分析

Show Profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量。(比Explain更加详细)

官方文档

默认情况下,参数处于关闭状态,并保存最近15次的运行结果。

  • 慢查询日志抓取有查询较慢的SQL;
  • Explain
  • Show Profile
  • 服务器数据和脚本重要属性的调优(比如my.cnf的配置文件)

分析步骤

1.是否支持,看看当前的mysql版本是否支持。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> variables <span style="color:#0000ff">like</span> <span style="color:#a31515">'profiling'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> Variable_name <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> profiling     <span style="color:#ab5656">|</span> OFF   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>

默认是关闭,使用前需要开启。

2.开启功能,默认是关闭,使用前需要开启。

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">set</span> profiling<span style="color:#ab5656">=</span><span style="color:#0000ff">on</span>;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> variables <span style="color:#0000ff">like</span> <span style="color:#a31515">'profiling'</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> Variable_name <span style="color:#ab5656">|</span> <span style="color:#0000ff">Value</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#ab5656">|</span> profiling     <span style="color:#ab5656">|</span> <span style="color:#0000ff">ON</span>    <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">---------------+-------+</span>
<span style="color:#880000">1</span> <span style="color:#a31515">row</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>

3.运行SQL

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> emp <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> id<span style="color:#ab5656">%</span><span style="color:#880000">10</span> limit <span style="color:#880000">150000</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> empno  <span style="color:#ab5656">|</span> ename <span style="color:#ab5656">|</span> job      <span style="color:#ab5656">|</span> mgr <span style="color:#ab5656">|</span> hiredate   <span style="color:#ab5656">|</span> sal     <span style="color:#ab5656">|</span> comm   <span style="color:#ab5656">|</span> deptno <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">10</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100011</span> <span style="color:#ab5656">|</span> akw   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100002</span> <span style="color:#ab5656">|</span> xmbva <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100003</span> <span style="color:#ab5656">|</span> aeq   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100004</span> <span style="color:#ab5656">|</span> cnjfz <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100005</span> <span style="color:#ab5656">|</span> wwhd  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">100</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100006</span> <span style="color:#ab5656">|</span> e     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100007</span> <span style="color:#ab5656">|</span> yjfr  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100008</span> <span style="color:#ab5656">|</span> xlp   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">8</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100009</span> <span style="color:#ab5656">|</span> mp    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">9</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100010</span> <span style="color:#ab5656">|</span> tcdl  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#880000">10</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.55</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> emp <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> id<span style="color:#ab5656">%</span><span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> <span style="color:#880000">5</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> empno  <span style="color:#ab5656">|</span> ename <span style="color:#ab5656">|</span> job      <span style="color:#ab5656">|</span> mgr <span style="color:#ab5656">|</span> hiredate   <span style="color:#ab5656">|</span> sal     <span style="color:#ab5656">|</span> comm   <span style="color:#ab5656">|</span> deptno <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100002</span> <span style="color:#ab5656">|</span> xmbva <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100004</span> <span style="color:#ab5656">|</span> cnjfz <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100006</span> <span style="color:#ab5656">|</span> e     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">7</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100008</span> <span style="color:#ab5656">|</span> xlp   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">9</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100010</span> <span style="color:#ab5656">|</span> tcdl  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">11</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100012</span> <span style="color:#ab5656">|</span> re    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">13</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100014</span> <span style="color:#ab5656">|</span> bvaf  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">15</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100016</span> <span style="color:#ab5656">|</span> qt    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">17</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100018</span> <span style="color:#ab5656">|</span> gf    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">19</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100020</span> <span style="color:#ab5656">|</span> ydokg <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">100</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100003</span> <span style="color:#ab5656">|</span> aeq   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100005</span> <span style="color:#ab5656">|</span> wwhd  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">100</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">6</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100007</span> <span style="color:#ab5656">|</span> yjfr  <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">8</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100009</span> <span style="color:#ab5656">|</span> mp    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">102</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">10</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100011</span> <span style="color:#ab5656">|</span> akw   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">12</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100013</span> <span style="color:#ab5656">|</span> qip   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">105</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">14</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100015</span> <span style="color:#ab5656">|</span> g     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">106</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">16</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100017</span> <span style="color:#ab5656">|</span> bzy   <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">109</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">18</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100019</span> <span style="color:#ab5656">|</span> r     <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">108</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">20</span> <span style="color:#ab5656">|</span> <span style="color:#880000">100021</span> <span style="color:#ab5656">|</span> ee    <span style="color:#ab5656">|</span> salesman <span style="color:#ab5656">|</span>   <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-05</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000.00</span> <span style="color:#ab5656">|</span> <span style="color:#880000">400.00</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">107</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+--------+-------+----------+-----+------------+---------+--------+--------+</span>
<span style="color:#880000">20</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.57</span> sec)
</code></span></span>

4.查看结果,show profiles;

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> profiles;
<span style="color:#ab5656">+</span><span style="color:#008000">----------+------------+-----------------------------------------------+</span>
<span style="color:#ab5656">|</span> Query_ID <span style="color:#ab5656">|</span> Duration   <span style="color:#ab5656">|</span> Query                                         <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------+------------+-----------------------------------------------+</span>
<span style="color:#ab5656">|</span>        <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.00204000</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">show</span> variables <span style="color:#0000ff">like</span> <span style="color:#a31515">'profiling'</span>               <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>        <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.55134250</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> emp <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> id<span style="color:#ab5656">%</span><span style="color:#880000">10</span> limit <span style="color:#880000">150000</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>        <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.56902000</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> emp <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> id<span style="color:#ab5656">%</span><span style="color:#880000">20</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> <span style="color:#880000">5</span>   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----------+------------+-----------------------------------------------+</span>
<span style="color:#880000">3</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span>, <span style="color:#880000">1</span> warning (<span style="color:#880000">0.00</span> sec)
</code></span></span>
  1. 化验单: 诊断SQL,show profile cpu,block io for query 上一步show profiles中的问题SQL数字号码;
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> profile cpu,block io <span style="color:#0000ff">for</span> query <span style="color:#880000">3</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">--------------------------------+----------+----------+------------+--------------+---------------+</span>
<span style="color:#ab5656">|</span> Status                         <span style="color:#ab5656">|</span> Duration <span style="color:#ab5656">|</span> CPU_user <span style="color:#ab5656">|</span> CPU_system <span style="color:#ab5656">|</span> Block_ops_in <span style="color:#ab5656">|</span> Block_ops_out <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">--------------------------------+----------+----------+------------+--------------+---------------+</span>
<span style="color:#ab5656">|</span> starting                       <span style="color:#ab5656">|</span> <span style="color:#880000">0.000008</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000007</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Waiting <span style="color:#0000ff">for</span> query cache lock   <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> checking query cache <span style="color:#0000ff">for</span> query <span style="color:#ab5656">|</span> <span style="color:#880000">0.000021</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000021</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> checking permissions           <span style="color:#ab5656">|</span> <span style="color:#880000">0.000004</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Opening tables                 <span style="color:#ab5656">|</span> <span style="color:#880000">0.000009</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000009</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#0000ff">System</span> lock                    <span style="color:#ab5656">|</span> <span style="color:#880000">0.000006</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000006</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Waiting <span style="color:#0000ff">for</span> query cache lock   <span style="color:#ab5656">|</span> <span style="color:#880000">0.000009</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000009</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> init                           <span style="color:#ab5656">|</span> <span style="color:#880000">0.000019</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000019</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> optimizing                     <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> statistics                     <span style="color:#ab5656">|</span> <span style="color:#880000">0.000007</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000008</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> preparing                      <span style="color:#ab5656">|</span> <span style="color:#880000">0.000004</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000004</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Creating tmp <span style="color:#0000ff">table</span>             <span style="color:#ab5656">|</span> <span style="color:#880000">0.000020</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000020</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> executing                      <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Copying <span style="color:#0000ff">to</span> tmp <span style="color:#0000ff">table</span>           <span style="color:#ab5656">|</span> <span style="color:#880000">0.329865</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.330004</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Sorting <span style="color:#0000ff">result</span>                 <span style="color:#ab5656">|</span> <span style="color:#880000">0.000015</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000011</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Sending data                   <span style="color:#ab5656">|</span> <span style="color:#880000">0.000023</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000023</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#0000ff">end</span>                            <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> removing tmp <span style="color:#0000ff">table</span>             <span style="color:#ab5656">|</span> <span style="color:#880000">0.000638</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000638</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#0000ff">end</span>                            <span style="color:#ab5656">|</span> <span style="color:#880000">0.000005</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000004</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> query <span style="color:#0000ff">end</span>                      <span style="color:#ab5656">|</span> <span style="color:#880000">0.000016</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000016</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> closing tables                 <span style="color:#ab5656">|</span> <span style="color:#880000">0.000005</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000005</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> freeing items                  <span style="color:#ab5656">|</span> <span style="color:#880000">0.000006</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000005</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Waiting <span style="color:#0000ff">for</span> query cache lock   <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> freeing items                  <span style="color:#ab5656">|</span> <span style="color:#880000">0.000056</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000056</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> Waiting <span style="color:#0000ff">for</span> query cache lock   <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> freeing items                  <span style="color:#ab5656">|</span> <span style="color:#880000">0.000001</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000001</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> storing <span style="color:#0000ff">result</span> <span style="color:#0000ff">in</span> query cache  <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000003</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> logging slow query             <span style="color:#ab5656">|</span> <span style="color:#880000">0.000001</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000001</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> cleaning up                    <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000002</span> <span style="color:#ab5656">|</span> <span style="color:#880000">0.000000</span>   <span style="color:#ab5656">|</span>            <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>             <span style="color:#880000">0</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">--------------------------------+----------+----------+------------+--------------+---------------+</span>
<span style="color:#880000">29</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.02</span> sec)
</code></span></span>

参数备注

  • ALL:显示所有的开销信息。
  • BLOCK IO:显示块lO相关开销。
  • CONTEXT SWITCHES :上下文切换相关开销。
  • CPU:显示CPU相关开销信息。
  • IPC:显示发送和接收相关开销信息。
  • MEMORY:显示内存相关开销信息。
  • PAGE FAULTS:显示页面错误相关开销信息。
  • SOURCE:显示和Source_function,Source_file,Source_line相关的开销信息。
  • SWAPS:显示交换次数相关开销的信息。

6.日常开发需要注意的结论 (有下面四种情况就很糟糕了)

  • converting HEAP to MyISAM 查询结果太大,内存都不够用了往磁盘上搬了。
  • Creating tmp table 创建临时表,拷贝数据到临时表,用完再删除
  • Copying to tmp table on disk 把内存中临时表复制到磁盘,危险!
  • locked

5-全局查询日志

永远不要在生产环境开启这个功能。

配置文件启用

在mysql的my.cnf中,设置如下:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">#开启
general_log<span style="color:#ab5656">=</span><span style="color:#880000">1</span>
#记录日志文件的路径
general_log_file<span style="color:#ab5656">=</span><span style="color:#ab5656">/</span>path<span style="color:#ab5656">/</span>logfile
#输出格式
log_output<span style="color:#ab5656">=</span>FILE
</code></span></span>

编码启用:

  • set global general_log=1;
  • set global log_output='TABLE';
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">set</span> <span style="color:#0000ff">global</span> general_log<span style="color:#ab5656">=</span><span style="color:#880000">1</span>;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">set</span> <span style="color:#0000ff">global</span> log_output<span style="color:#ab5656">=</span><span style="color:#a31515">'TABLE'</span>;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.00</span> sec)
</code></span></span>

此后,你所编写的sql语句,将会记录到mysql库里的geneial_log表,可以用下面的命令查看:

image-20210515002344075

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> mysql.general_log;
</code></span></span>

猜你喜欢

转载自blog.csdn.net/m0_60961651/article/details/132272835
今日推荐