General talk about MySQL (3)

 3. Query Interception Analysis

1- Query optimization

①Small watch drives big watch

The usual SQL tuning process: (Interview question: How do you usually optimize SQL?)

  1. Observe, run for at least 1 day to see the slow SQL situation in production.
  2. Turn on the slow query log, set the threshold, for example, if it exceeds 5 seconds, it is slow SQL, and grab it. (Find out slow SQL)
  3. explain + slow SQL analysis.
  4. show profile。
  5. Operation and maintenance manager or DBA, to tune the parameters of the SQL database server.

Summarize:

  1. Enable and capture slow queries
  2. explain + slow SQL analysis
  3. show profile Query the execution details and life cycle of SQL in the Mysql server
  4. Parameter tuning of the SQL database server.

Optimization principle: Small tables drive large tables, that is, small data sets drive large data sets.

<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>

Similar to the above two for loops, try to choose the one above. The most time-consuming part of the database is the establishment of relationships between multiple tables . The first type: equivalent to establishing 5 connections between two tables; the second type: equivalent to establishing 1000 connections between two tables. That is to say, what is nested inside should be a small table! (Because the nested one is executed first, it is equivalent to the nested SQL being the outer for loop)

RBO principle

When the data set of table B is smaller than the data set of table A, using in is better than 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>

When the data set of table B is larger than that of table A, using exists is better than 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>

Note: The ID fields of table A and table B should be indexed.

EXISTS keyword
<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>

This syntax can be understood as: first put the data of the main query into the subquery for conditional verification, and determine whether the data result of the main query can be retained according to the verification result (TRUE or FALSE).

hint

  1. EXSTS(subquey) only returns TRUE or FALSE , so the SELECT * in the subquery can also be SELECT 1 or select 'X'. The official statement is that the SELECT list will be ignored during actual execution, so there is no difference.
  2. The actual execution process of the EXISTS subquery may have been optimized rather than a one-by-one comparison in our understanding. If you are concerned about efficiency issues, you can conduct an actual test to determine whether there is an efficiency issue.
  3. The EXISTS subquery can often be replaced by conditional expressions, other subqueries or JOIN. Which is the best requires specific analysis of specific issues

②in和exists

Example table:

<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 and exists usage

<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>

③ Use index OrderBy optimization for sorting

For the ORDER BY clause, try to use the Index method for sorting, and avoid using the FileSort method for sorting.

New 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>

View verification:

<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>

The key point of analyzing SQL  is whether UsingFileSort will be generated :

<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>

The last case: Although the order of order by is consistent with the order of creating indexes, since order by default is ascending order and DESC is descending order, the default order of MySQL index creation is ascending order, and descending order is needed now, which is no longer available , then MySQL only generates an internal sort once.

MySQL supports two types of sorting, FileSort and lIndex, and Index is efficient, which means that MySQL scans the index itself to complete the sorting. The FileSort method is less efficient.

Conclusion: ORDER BY satisfies two conditions, and will use the Index method to sort:

  1. The ORDER BY statement uses the leftmost front column of the index.
  2. Use the combination of the where clause and the conditional column of the Order BY clause to satisfy the leftmost front column of the index.

④MySQL's Filesort

If the column of the Order by query is not on the index column, MySQL's Filesort has two algorithms:

1) Two-way sorting

Before MySQL 4.1, two-way sorting was used, which literally means scanning the disk twice , finally getting the data, reading the row pointer and OrderBy column, sorting them, then scanning the sorted list, and reordering from the list according to the values ​​in the list Read the corresponding data output in the list.

Get the sorting field from the disk, sort it in the buffer, and then get other fields from the disk.

To fetch a batch of data, the disk needs to be scanned twice. As we all know, I\O is very time-consuming, so after mysql4.1, a second improved algorithm appeared, which is one-way sorting.

2) Single-way sorting

Read all the columns required by the query from the disk, sort them in the buffer according to the order by column, and then scan the sorted list for output. It is more efficient and avoids reading data for the second time. And turn random IO into sequential IO, but it will use more space because it saves each row in memory.

Conclusion and raised questions

  • Since the single-lane exits at the end, it is generally better than the dual-lane

  • But there is a problem with single channel

In sort_buffer (the buffer size is configured in my.cnf), method B takes up a lot more space than method A, because method B takes out all the fields , so the total size of the data that may be taken out exceeds the size of sort_buffer Capacity, so that only data with the capacity of sort_buffer can be fetched each time for sorting (creating tmp files, multi-way merging), and fetching after sorting

The size of sort_buffer capacity, and then arrange... thus multiple I/O. ( analogous to the buffer size is not enough, it can only be fetched multiple times )

I originally wanted to save an I/O operation, but it resulted in a large number of I/O operations, which was not worth the candle.

⑤Optimization strategy

  • Increase the setting of the sort_buffer_size parameter
  • Increase the setting of the max_length_for_sort_data parameter

Why can setting sort_buffer_size and max_length_for_sort_data parameters optimize sorting?

Improve the speed of Order By:

  1. When ordering by, select * is a taboo field only required by Query, which is very important (it is easy to fill the buffer ). The effects here are;

    • When the sum of the field sizes of the Query is less than max_length_for_sort_data and the sorting field is not of TEXT|BLOB type, the improved algorithm - single-way sorting will be used, otherwise the old algorithm - multi-way sorting will be used.

    • The data of both algorithms may exceed the capacity of sort_buffer. After exceeding, a temporary tmp file will be created for merging and sorting , resulting in multiple IOs. However, the risk of using a single-way sorting algorithm will be greater, so sort_buffer__size should be increased.

  2. Try to increase the sort_buffer_size. No matter which algorithm is used, increasing this parameter will improve efficiency. Of course, it should be increased according to the system's capabilities, because this parameter is specific to each process.

  3. Try to increase max_length_for_sort_data, increasing this parameter will increase the probability of using the improved algorithm. But if it is set too high, the probability of total data capacity exceeding sort_buffer_size increases, and the obvious symptoms are high disk I/O activity and low processor usage.

⑥Index and Order by summary

use index for sorting

  • MySql two sorting methods: file sorting or scanning ordered index sorting
  • MySql can use the same index for sorting and querying

Create a composite index a_b_c (a, b, c)

order by can use the leftmost prefix of the index

  • ORDER BY a
  • ORDER BY a, b
  • ORDER BY a, b, c
  • ORDER BY a DESC, b DESC, c DESC ( both ascending or all descending )

If WHERE is defined as a constant using the leftmost prefix of the prime index, then order by can use the index ( does not generate 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  here is > but still a constant

cannot use index for sorting

  • ORDER BY a ASC, b DESC, c DESC // sorting is inconsistent
  • WHERE g = const ORDER BY b, c // produce lost a index
  • WHERE a = const ORDER BY c // The middle brother is broken  and loses b index
  • WHERE a = const ORDER BY a, d //d is not part of prime
  • WHERE a in (...) ORDER BY b, c // For sorting, multiple equality conditions are also range queries are not constant

2-GroupBy optimization

GroupBy optimization

  • The essence of group by is to sort first and then group , and follow the best left prefix built by the index.
  • When the index column cannot be used, increase the setting of the max_length_for_sort_data parameter + increase the setting of the sort_buffer_size parameter.
  • Where is higher than having, and the conditions that can be written in where are not restricted by having.

3- Slow query log

  • MySQL's slow query log is a log record provided by MySQL. It is used to record statements whose response time exceeds the threshold in MySQL. Specifically, SQL whose running time exceeds the long_query_time value will be recorded in the slow query log.
  • Specifically, SQL whose running time exceeds the value of long_query_time will be recorded in the slow query log. The default value of long_query_time is 10, which means to run the statement for more than 10 seconds.
  • Let him check which SQLs exceed our maximum tolerance time value. For example, if a SQL executes for more than 5 seconds, we will consider it as slow SQL. We hope to collect SQLs longer than 5 seconds and conduct a comprehensive analysis in combination with the previous explain.

①How to operate

By default, the MySQL database does not enable slow query daily speed, and we need to manually set this parameter .

Of course, if it is not necessary for tuning, it is generally not recommended to enable this parameter, because enabling the slow query log will more or less bring about certain performance impacts. Slow query log supports writing log records to files.

1) Check whether it is enabled and how to enable it
  • 默认 - SHOW VARIABLES LIKE '%slow_query_log%';
  • One-time open - set global slow_query_log=1;, only effective for the current database, if MySQL is restarted, it will be invalid . Valid only for this 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">'%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>

If you want to take effect permanently, you must modify the configuration file my.cnf (the same is true for other system variables)

Modify the my.cnf file, add or modify the parameters slow_query_log and slow_query_log_file under [mysqld], and then restart the MySQL server. Also configure the following two lines into the my.cnf file

<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>

Regarding the parameter slow_query_log_file of the slow query, it specifies the storage path of the slow query log file, and the system defaults to a default file host_name-slow.log (if the parameter slow_query_log_file is not specified)

2) Turn on the slow query log

What kind of SQL will be recorded in the slow query log?

This is controlled by the parameter long_query_time. By default, the value of long_query_time is 10 seconds . Command: 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>

You can use commands to modify it, or you can modify it in the my.cnf parameter.

If the running time is exactly equal to long_query_time, it will not be recorded . In other words, in the mysql source code, it is judged to be greater than long_query_time, not greater than or equal to.

3) Set the slow SQL threshold time:

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>

Why can't I see the change after setting it?

You need to reconnect or open a new session to see the modified value.

4) Record slow SQL and analyze it later

Suppose we successfully set the slow SQL threshold time to 3 seconds (set global long_query_time=3;).

Simulate timeout 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>

Logging:

Query how many slow query records are in the current system

<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>

Set the slow SQL threshold time in the configuration file  to take effect permanently!

<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>

② log analysis tool mysqldumpslow

In a production environment, if you want to manually analyze logs, find and analyze SQL, it is obviously a laborious task. MySQL provides a log analysis tool mysqldumpslow.

View the help information of mysqldumpslow, mysqldumpslow --help.

  • s: indicates which way to sort
  • c: number of visits
  • l: lock time
  • r: return record
  • t: query time
  • al: average lock time
  • ar: the average number of records returned
  • at: average query time
  • t: that is, how many previous pieces of data are returned
  • g: followed by a regular matching pattern, case insensitive

Work reference

  • Get the 10 most returned recordset SQL
    • mysqldumpslow -s r -t 10 /var/lib/mysql/atguigu-slow.log
  • Get the 10 SQLs with the most visits
    • mysqldumpslow -s c -t 10 /var/lib/mysql/atguigu-slow.log
  • Get the first 10 query statements that contain left joins sorted by time
    • mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/atguigu-slow.log
  • In addition, it is recommended to use these commands in combination with │ and more, otherwise there may be a screen burst (you can also combine the pipeline to write the result to a file )
    • mysqldumpslow -s r-t 10 /ar/lib/mysql/atguigu-slow.log | more

3- Batch insert data script (stored procedure)

①Create 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>

② Set the parameter log_bin_trust_function_creators

Create a function, if an error is reported: This function has none of DETERMINISTIC…

Since the slow query log is turned on, because we turned on the bin-log, we must specify a parameter for our 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>

After adding the parameters in this way, if mysqld restarts, the above parameters will disappear again. The permanent method:

  • my.ini[mysqld] under windows plus log_bin_trust_function_creators=1

  • /etc/my.cnf under linux my.cnf[mysqld] plus log_bin_trust_function_creators=1

③Create a function to ensure that each piece of data is different

1) Randomly generate a string

<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) Randomly generate department numbers

<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>

operation result

<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>

④ Create a stored procedure

Create a stored procedure to insert data into the emp table

Note: Set autocommit to 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>

Create a stored procedure to insert data into the dept table

<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>

⑤ Call the stored procedure

Insert data into the dept table

<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>

Insert 500,000 data into the emp table

<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>

operation result

<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- SQL analysis with Show Profile

Show Profile is provided by MySQL and can be used to analyze the resource consumption of statement execution in the current session . Measurements that can be used for SQL tuning. (more detailed than Explain)

official document

By default, the parameter is turned off and the results of the last 15 runs are saved.

  • The slow query log captures SQL with slow query;
  • Explain
  • Show Profile
  • Tuning of important properties of server data and scripts (such as the configuration file of my.cnf)

Analysis steps

1. Whether it is supported, check whether the current mysql version supports it.

<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>

The default is off, and it needs to be turned on before use.

2. Turn on the function, the default is off, it needs to be turned on before use.

<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. Run 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. View the results, 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. Laboratory test sheet: Diagnose SQL, show profile cpu, block io for query SQL number of the problem in the previous step 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> 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>

Parameter Remarks

  • ALL: Display all overhead information.
  • BLOCK IO: Display block lO related overhead.
  • CONTEXT SWITCHES : Context switching related overhead.
  • CPU: Display CPU-related overhead information.
  • IPC: Displays sending and receiving related overhead information.
  • MEMORY: Display memory-related overhead information.
  • PAGE FAULTS: Displays overhead information related to page faults.
  • SOURCE: Display overhead information related to Source_function, Source_file, and Source_line.
  • SWAPS: Display information about the overhead associated with the number of swaps.

6. Conclusions that need to be paid attention to in daily development  (it is very bad to have the following four situations)

  • Converting HEAP to MyISAM The query result is too large, and the memory is not enough, so it is moved to the disk.
  • Creating tmp table Create a temporary table, copy data to the temporary table, delete it after use
  • Copying to tmp table on disk Copying temporary tables in memory to disk, dangerous!
  • locked

5- Global query log

Never enable this feature in a production environment.

profile enabled

In the my.cnf of mysql, the settings are as follows:

<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>

Encoding enabled:

  • 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>

After that, the sql statement you write will be recorded in the geneial_log table in the mysql library, and you can use the following command to view it:

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>

Guess you like

Origin blog.csdn.net/m0_60961651/article/details/132272835