Charla general sobre MySQL (2)

 2. Análisis de optimización de índices

1- Razones para la degradación del rendimiento de SQL

1. La declaración de consulta está mal escrita y no se construye ningún índice

2. Invalidación del índice

  • valor único
<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> <span style="color:#0000ff">user</span> <span style="color:#0000ff">where</span> name<span style="color:#ab5656">=</span><span style="color:#a31515">''</span>;
<span style="color:#0000ff">create</span> index idx_user_name <span style="color:#0000ff">on</span> <span style="color:#0000ff">user</span>(name);
</code></span></span>
  • complejo
<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> <span style="color:#0000ff">user</span> <span style="color:#0000ff">where</span> name<span style="color:#ab5656">=</span><span style="color:#a31515">''</span> <span style="color:#0000ff">and</span> email<span style="color:#ab5656">=</span><span style="color:#a31515">''</span>;
<span style="color:#0000ff">create</span> index idx_user_name <span style="color:#0000ff">on</span> <span style="color:#0000ff">user</span>(name, email);
</code></span></span>

3. Demasiadas uniones en consultas asociadas (fallas de diseño o requisitos inevitables)

4. Ajuste del servidor y varios ajustes de parámetros (búfer, número de subprocesos, etc.)

Orden de carga de ejecución 2-SQL

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">SELECT</span> <span style="color:#0000ff">DISTINCT</span>
    <span style="color:#ab5656"><</span>select_list<span style="color:#ab5656">></span>
<span style="color:#0000ff">FROM</span>
    <span style="color:#ab5656"><</span>left_table<span style="color:#ab5656">></span> <span style="color:#ab5656"><</span>join_type<span style="color:#ab5656">></span>
<span style="color:#0000ff">JOIN</span> 
    <span style="color:#ab5656"><</span>right_table<span style="color:#ab5656">></span> 
<span style="color:#0000ff">ON</span>
    <span style="color:#ab5656"><</span>join_condition<span style="color:#ab5656">></span>
<span style="color:#0000ff">WHERE</span>
    <span style="color:#ab5656"><</span>where_condition<span style="color:#ab5656">></span>
<span style="color:#0000ff">GROUP</span> <span style="color:#0000ff">BY</span>
    <span style="color:#ab5656"><</span>group_by_list<span style="color:#ab5656">></span>
<span style="color:#0000ff">HAVING</span>
    <span style="color:#ab5656"><</span>having_condition<span style="color:#ab5656">></span>
<span style="color:#0000ff">ORDER</span> <span style="color:#0000ff">BY</span>
    <span style="color:#ab5656"><</span>order_by_condition<span style="color:#ab5656">></span>
LIMIT
    <span style="color:#ab5656"><</span>limit_number<span style="color:#ab5656">></span>
</code></span></span>

La lectura automática  comienza con from

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#880000">1</span> <span style="color:#0000ff">FROM</span> <span style="color:#ab5656"><</span>left_table<span style="color:#ab5656">></span>
<span style="color:#880000">2</span> <span style="color:#0000ff">ON</span> <span style="color:#ab5656"><</span>join_condition<span style="color:#ab5656">></span>
<span style="color:#880000">3</span> <span style="color:#ab5656"><</span>join_type<span style="color:#ab5656">></span> <span style="color:#0000ff">JOIN</span> <span style="color:#ab5656"><</span>right_table<span style="color:#ab5656">></span>
<span style="color:#880000">4</span> <span style="color:#0000ff">WHERE</span> <span style="color:#ab5656"><</span>where_condition<span style="color:#ab5656">></span>
<span style="color:#880000">5</span> <span style="color:#0000ff">GROUP</span> <span style="color:#0000ff">BY</span> <span style="color:#ab5656"><</span>group_by_list<span style="color:#ab5656">></span>
<span style="color:#880000">6</span> <span style="color:#0000ff">HAVING</span> <span style="color:#ab5656"><</span>having_condition<span style="color:#ab5656">></span>
<span style="color:#880000">7</span> <span style="color:#0000ff">SELECT</span>
<span style="color:#880000">8</span> <span style="color:#0000ff">DISTINCT</span> <span style="color:#ab5656"><</span>select_list<span style="color:#ab5656">></span>
<span style="color:#880000">9</span> <span style="color:#0000ff">ORDER</span> <span style="color:#0000ff">BY</span> <span style="color:#ab5656"><</span>order_by_condition<span style="color:#ab5656">></span>
<span style="color:#880000">10</span> LIMIT <span style="color:#ab5656"><</span>limit_number<span style="color:#ab5656">></span>
</code></span></span>

Resumir

3- Siete teorías JOIN

  • Para el caso 1

select * from A inner join B on A.key=B.key  inner indica la necesidad de consultar  la parte pública de AB

  • Para el caso 2

select * from A left join B on A.key=B.key  left left indica que  la parte pública de todos los AB en la tabla de la izquierda es requerida + única para A

  • Para el caso 3

seleccione * de A a la derecha únase a B en A.key=B.key  right right significa que  la parte pública de todos los AB en la tabla de la derecha + la exclusiva de B

  • Para el caso 4 A debe ser monopolizado

select * from A left join B on A.key=B.key where B.key is NULL  left Left indica que todas  las partes de A + las partes públicas no AB de la tabla de la izquierda son obligatorias

  • Exclusivo para caso 5 B

select * from A right join B on A.key=B.key where B.key is NULL  right Right significa que todas las  partes de la tabla derecha que pertenecen a B son obligatorias + las partes públicas que no son AB

Escritura SQL de siete tipos de JOIN

Para prepararse, cree las siguientes tablas e inserte nuevos datos:

<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> tbl_dept(
	id <span style="color:#a31515">INT</span>(<span style="color:#880000">11</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	deptName <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">30</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	locAdd <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">40</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY(id)
)ENGINE<span style="color:#ab5656">=</span>INNODB AUTO_INCREMENT<span style="color:#ab5656">=</span><span style="color:#880000">1</span> <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> tbl_emp (
	id <span style="color:#a31515">INT</span>(<span style="color:#880000">11</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	NAME <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">20</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	deptId <span style="color:#a31515">INT</span>(<span style="color:#880000">11</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY (id),
	KEY fk_dept_Id (deptId)
	#<span style="color:#0000ff">CONSTRAINT</span> <span style="color:#a31515">'fk_dept_Id'</span> <span style="color:#0000ff">foreign</span> key (<span style="color:#a31515">'deptId'</span>) <span style="color:#0000ff">references</span> <span style="color:#a31515">'tbl_dept'</span>(<span style="color:#a31515">'Id'</span>)
)ENGINE<span style="color:#ab5656">=</span>INNODB AUTO_INCREMENT<span style="color:#ab5656">=</span><span style="color:#880000">1</span> <span style="color:#0000ff">DEFAULT</span> CHARSET<span style="color:#ab5656">=</span>utf8;

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_dept(deptName,locAdd) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'RD'</span>,<span style="color:#880000">11</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_dept(deptName,locAdd) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'HR'</span>,<span style="color:#880000">12</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_dept(deptName,locAdd) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'MK'</span>,<span style="color:#880000">13</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_dept(deptName,locAdd) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'MIS'</span>,<span style="color:#880000">14</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_dept(deptName,locAdd) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'FD'</span>,<span style="color:#880000">15</span>);

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'z3'</span>,<span style="color:#880000">1</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'z4'</span>,<span style="color:#880000">1</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'z5'</span>,<span style="color:#880000">1</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'w5'</span>,<span style="color:#880000">2</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'w6'</span>,<span style="color:#880000">2</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'s7'</span>,<span style="color:#880000">3</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'s8'</span>,<span style="color:#880000">4</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_emp(NAME,deptId) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'s9'</span>,<span style="color:#880000">51</span>);
</code></span></span>

El resultado después de la ejecución:

<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_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.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;
<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.00</span> sec)
#这就是为什么需要<span style="color:#0000ff">join</span> <span style="color:#0000ff">from</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_dept,tbl_emp;
<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> 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> RD       <span style="color:#ab5656">|</span> <span style="color:#880000">11</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> HR       <span style="color:#ab5656">|</span> <span style="color:#880000">12</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">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:#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">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:#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">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:#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">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:#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">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:#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> MK       <span style="color:#ab5656">|</span> <span style="color:#880000">13</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">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:#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">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:#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">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:#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">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:#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">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:#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> MIS      <span style="color:#ab5656">|</span> <span style="color:#880000">14</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">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:#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">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:#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">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:#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">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:#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">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:#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> FD       <span style="color:#ab5656">|</span> <span style="color:#880000">15</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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#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:#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:#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:#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:#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:#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:#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:#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:#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">40</span> <span style="color:#0000ff">rows</span> <span style="color:#0000ff">in</span> <span style="color:#0000ff">set</span> (<span style="color:#880000">0.04</span> sec)
</code></span></span>

1. unión interna

<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 a <span style="color:#0000ff">inner</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id;
<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> 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> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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">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:#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">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:#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">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:#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">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:#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">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:#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:#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>

2. combinación izquierda

<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 a <span style="color:#0000ff">left</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id;
<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> 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> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>     <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</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.00</span> sec)
</code></span></span>

3. unión derecha

<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 a <span style="color:#0000ff">right</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id;
<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> 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> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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">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:#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">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:#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">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:#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">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:#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">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:#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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span>   <span style="color:#0000ff">NULL</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">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.00</span> sec)
</code></span></span>

4. combinación izquierda 2

<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 a <span style="color:#0000ff">left</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id <span style="color:#0000ff">where</span> b.id <span style="color:#0000ff">is</span> <span style="color:#0000ff">null</span>;
<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> 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">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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>     <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</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>

5. Unión derecha 2

<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 a <span style="color:#0000ff">right</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id <span style="color:#0000ff">where</span> a.deptid <span style="color:#0000ff">is</span> <span style="color:#0000ff">null</span>;
<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> 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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span>   <span style="color:#0000ff">NULL</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">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>

6. unión completa

MySQL no admite la unión completa, pero se puede expresar de otra manera

<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 a <span style="color:#0000ff">left</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">union</span>
    <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp a <span style="color:#0000ff">right</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id;
<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> 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> z3   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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> z4   <span style="color:#ab5656">|</span>      <span style="color:#880000">1</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">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:#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">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:#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">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:#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">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:#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">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:#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">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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>     <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span>   <span style="color:#0000ff">NULL</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">9</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>

7. unión completa 2

<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 a <span style="color:#0000ff">left</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id <span style="color:#0000ff">where</span> b.id <span style="color:#0000ff">is</span> <span style="color:#0000ff">null</span> 
     <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">union</span> 
     <span style="color:#ab5656">-</span><span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_emp a <span style="color:#0000ff">right</span> <span style="color:#0000ff">join</span> tbl_dept b <span style="color:#0000ff">on</span> a.deptId <span style="color:#ab5656">=</span> b.id <span style="color:#0000ff">where</span> a.deptId <span style="color:#0000ff">is</span> <span style="color:#0000ff">null</span>;
<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> 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">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:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>     <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span>   <span style="color:#0000ff">NULL</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">2</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- ¿Qué es un índice?

La definición oficial de índice de MySQL es: Índice (Índice) es una estructura de datos que ayuda a MySQL a obtener datos de manera eficiente. Se puede obtener la esencia del índice: el índice es una estructura de datos.

El propósito del índice es mejorar la eficiencia de las consultas, que se puede comparar con un diccionario.

Si queremos buscar la palabra "mysql", definitivamente necesitamos ubicar la letra m, luego encontrar la letra y de abajo hacia abajo y luego encontrar el resto de sql. Si no hay índice, es posible que deba buscar uno por uno. ¿Qué pasa si quiero encontrar las palabras que comienzan con Java? ¿O qué pasa con las palabras que comienzan con Oracle?

Simplemente puede entenderlo como "estructura de datos de búsqueda rápida ordenada".

  • ordenado
  • búsqueda rápida

Además de los datos, los sistemas de bases de datos también mantienen estructuras de datos que satisfacen algoritmos de búsqueda específicos Estas estructuras de datos hacen referencia a (apuntan a) datos de cierta manera, de modo que se pueden implementar algoritmos de búsqueda avanzada en estas estructuras de datos. Esta estructura de datos es un índice . La siguiente figura es un ejemplo de un posible método de indexación:

A la izquierda está la tabla de datos, que tiene dos columnas y siete registros, y la más a la izquierda es la dirección física del registro de datos.

Para acelerar la búsqueda de Col2, se puede mantener un árbol de búsqueda binario que se muestra a la derecha , cada nodo contiene un valor de clave de índice y un puntero a la dirección física del registro de datos correspondiente, para que se pueda utilizar la búsqueda binaria. dentro de una cierta complejidad Obtener los datos correspondientes , para recuperar rápidamente los registros que cumplen las condiciones.

En resumen, ¿por qué las búsquedas de índices son más rápidas? ¡Piense en usar un árbol de búsqueda binario para consultar es definitivamente más rápido que el recorrido secuencial! En términos generales, el índice en sí también es muy grande y es imposible almacenarlo todo en la memoria, por lo que el índice a menudo se almacena en el disco en forma de archivo de índice.

El índice al que solemos referirnos, si no se especifica, se refiere al índice organizado por el árbol B (árbol de búsqueda multidireccional, no necesariamente binario) . Entre ellos, el índice agrupado, el índice secundario, el índice de cobertura, el índice compuesto, el índice de prefijo y el índice único utilizan el índice de árbol B+ de forma predeterminada, denominados colectivamente como índice. Por supuesto, además del índice del tipo de árbol B+, existen índices hash y similares.

Una nota:

Generalmente, en una empresa, si se elimina un dato, el activo de este registro solo se cambia a falso.Muchas de las eliminaciones que llaman a la capa de servicio son en realidad actualizaciones , que solo se puede decir que se eliminan lógicamente, pero el base de datos subyacente Aún se conservan registros. Una de las razones: una es para el análisis de datos; la otra es el índice (el índice puede ser inexacto si se eliminan los datos y su posición ya no es fija). Cuando los datos se incrementan y modifican con frecuencia, el árbol de búsqueda binaria será inexacto. ( Simplemente reconstruya el índice nuevamente ).

① Índice de ventajas y desventajas

  • Ventaja

Similar al índice bibliográfico construido por una biblioteca universitaria, mejora la eficiencia de la recuperación de datos y reduce el costo de IO de la base de datos.

La clasificación de datos a través de columnas de índice reduce el costo de la clasificación de datos y reduce el consumo de CPU.

  • desventaja

De hecho, el índice también es una tabla, que almacena la clave principal y el campo de índice, y apunta al registro de la tabla de entidades , por lo que la columna de índice también ocupa espacio (ocupa espacio)

Aunque el índice mejora en gran medida la velocidad de consulta, reducirá la velocidad de actualización de la tabla, como INSERTAR, ACTUALIZAR y ELIMINAR en la tabla. Porque al actualizar la tabla, MySQL no solo necesita guardar los datos, sino que también guarda el archivo de índice. Cada vez que se actualice el campo con la columna de índice agregada, se ajustará la información del índice después del cambio de valor clave causado por la actualización.

La indexación es solo un factor para mejorar la eficiencia. Si su MySQL tiene tablas con una gran cantidad de datos, debe dedicar tiempo a investigar y crear los mejores índices u optimizar las consultas.

  • Resumir

Índices, comercio de espacio por tiempo.

② Declaración de comando de clasificación y creación de índices

Clasificación del índice MySQL:

  • Índice de valor único: es decir, un índice contiene solo una columna y una tabla puede tener varios índices de una sola columna. ( Se recomienda que no haya más de 5 índices en una tabla y se prefieren los índices compuestos )
  • Índice único: El valor de la columna de índice debe ser único, pero se permiten valores nulos.
  • Índice compuesto: es decir, un índice contiene varias columnas.
  • Sintaxis básica:
    • crear
      • CREAR [ÚNICO] ÍNDICE indexName ON mytable (columnName (longitud));
      • ALTER mytable ADD [UNIQUE] INDEX [indexName] ON (columnName(longitud));
    • borrar
      • DROP INDEX [indexName] ON mytable;
    • Controlar
      • MOSTRAR ÍNDICE DESDE tableName
    • Use el comando alter: hay cuatro formas de agregar índices de tablas de datos
      • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);: esta declaración agrega una clave principal , lo que significa que el valor del índice debe ser único y no puede ser NULL.
      • ALTER TABLE tbl name ADD UNIQUE index_name (column_list);: El valor del índice creado por esta declaración debe ser único (excepto NULL, NULL puede aparecer varias veces).
      • ALTER TABLE tbl_name ADD INDEX index_name (column_list);: Agregue un índice común, el valor del índice puede aparecer varias veces.
      • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list): esta instrucción especifica el índice como FULLTEXT para la indexación de texto completo.

③ Estructura del índice y principio de recuperación

Estructura del índice de MySQL

  • índice Btree
  • índice hash
  • índice de texto completo
  • Índice de árbol R

Principio de recuperación del índice BTree

Introducción a la inicialización

Un árbol b+, el bloque azul claro que llamamos bloque de disco, puede ver que cada bloque de disco contiene varios elementos de datos (que se muestran en azul oscuro) y punteros (que se muestran en amarillo), como el bloque de disco 1 que contiene los elementos de datos 17 y 35 , que contiene los punteros P1, P2, P3,

P1 representa bloques de disco inferiores a 17, P2 representa bloques de disco entre 17 y 35 y P3 representa bloques de disco superiores a 35.

Los datos reales existen en los nodos hoja, a saber, 3, 5, 9, 10, 13, 15, 28, 29, 36, 60, 75, 79, 90, 99.

Los nodos que no son hojas no almacenan datos reales, solo almacenan elementos de datos que guían la dirección de búsqueda , como 17 y 35 que en realidad no existen en la tabla de datos. (como valor de comparación de referencia)

proceso de busqueda

Si se va a buscar el elemento de datos 29, el bloque de disco 1 se cargará primero desde el disco a la memoria y se producirá una E/S en este momento. Use la búsqueda binaria en la memoria para determinar que 29 está entre 17 y 35, y bloquee el puntero P2 del bloque de disco 1. Debido a que el tiempo de memoria es muy corto (en comparación con el disco IO), se puede ignorar y la dirección del disco de se usa el puntero P2 del bloque de disco 1. El bloque de disco 3 se carga desde el disco a la memoria, ocurre la segunda E/S, 29 está entre 26 y 30, el puntero P2 del bloque de disco 3 está bloqueado y el bloque de disco 8 se carga en la memoria a través del puntero, se produce el tercer IO y, al mismo tiempo, la memoria lo hace. La búsqueda binaria encuentra 29 y finaliza la consulta, con un total de tres IO. cuanto más corto sea el árbol, mejor

La situación real es que un árbol b+ de 3 capas puede representar millones de datos. Si millones de búsquedas de datos solo necesitan tres IO, la mejora del rendimiento será enorme. Si no hay índice, cada elemento de datos requiere un IO, entonces un total Se requieren millones de IO, obviamente el costo es muy, muy alto.

④Qué situaciones son adecuadas para la indexación

  1. La clave principal crea automáticamente un índice único
  2. Los campos que se utilizan con frecuencia como criterios de consulta deben crear índices
  3. Los campos asociados con otras tablas en la consulta, las relaciones de clave externa están indexadas
  4. Los campos que se actualizan con frecuencia no son adecuados para crear índices, porque cada actualización no solo actualiza el registro sino que también actualiza el índice.
  5. No se crea ningún índice para los campos que no se utilizan en la condición Dónde
  6. La elección de clave única/índice compuesto, ¿quién? (Diez para crear un índice compuesto bajo alta concurrencia)
  7. Los campos ordenados en la consulta, si se accede a los campos ordenados a través del índice, la velocidad de clasificación mejorará considerablemente (el índice es recuperación + clasificación)
  8. Campos estadísticos o de agrupación en consultas

⑤Qué situaciones no son adecuadas para la indexación

  1. registros de tabla muy pocos
  2. Tablas que se agregan, eliminan y modifican con frecuencia (no se crean, aunque se mejora la velocidad de consulta, pero se reduce la eficiencia de actualización, no solo se deben actualizar los campos, sino que también se debe actualizar la información del índice correspondiente)
  3. Campos de tabla con datos repetidos y distribuidos uniformemente, por lo que solo se deben indexar las columnas de datos consultadas y ordenadas con mayor frecuencia. Tenga en cuenta que si una columna contiene muchos duplicados, indexarla no tendrá mucho efecto práctico.

Si una tabla tiene 100 000 filas de registros, un campo A tiene solo dos valores de T y F, y la probabilidad de distribución de cada valor es de alrededor del 50 %, por lo general, indexar el campo A de esta tabla no mejorará la consulta de la velocidad de la base de datos .

La selectividad de un índice es la relación entre el número de valores distintos en la columna indexada y el número de registros en la tabla. Si hay 2000 registros en una tabla y la columna del índice de la tabla tiene 1980 valores diferentes, entonces la selectividad de este índice es 1980/2000=0,99. Cuanto más cerca de 1 esté la selectividad de un índice, más eficiente será el índice.

5-Conocimiento previo de análisis de rendimiento

Optimizador de consultas MySQL

Existe un módulo optimizador en Mysql que se encarga de optimizar la sentencia SELECT, su función principal es brindar al Query solicitado por el cliente el plan de ejecución óptimo (él considera el método óptimo de recuperación de datos) mediante el cálculo y análisis de la información estadística recolectada. en el sistema. , pero no necesariamente el DBA piensa que es óptimo, esta parte es la que consume más tiempo)

Cuando el cliente solicita una consulta de MySQL, el módulo analizador de comandos completa la clasificación de la solicitud, la distingue como SELECT y la reenvía a MySQL Query Optimizer, MySQL Query Optimizer primero optimizará toda la consulta y se ocupará del presupuesto de algunas expresiones constantes directamente. convertida a un valor constante. Y simplifique y convierta las condiciones de consulta en Query, como eliminar algunas condiciones inútiles u obvias, ajuste estructural, etc. Luego, analice la información de Sugerencia (si existe) en la Consulta para ver si la información de Sugerencia que se muestra puede determinar completamente el plan de ejecución de la Consulta. Si no hay una pista o la información de la pista no es suficiente para determinar completamente el plan de ejecución, leerá la información estadística de los objetos involucrados, escribirá el cálculo y análisis correspondiente de acuerdo con la consulta y luego dibujará el plan de ejecución final.

Cuellos de botella comunes de MySQL

  • CPU: la saturación de la CPU generalmente ocurre cuando los datos se cargan en la memoria o se leen del disco
  • IO: el cuello de botella de E/S del disco se produce cuando los datos cargados son mucho mayores que la capacidad de la memoria
  • El cuello de botella de rendimiento del hardware del servidor: top, free, iostat y vmstat para ver el estado de rendimiento del sistema

①Introducción al uso de explicación

Qué es Explique: use la palabra clave EXPLAIN para simular el optimizador para ejecutar declaraciones de consulta SQL, para saber cómo MySQL procesa sus declaraciones SQL. Analice el cuello de botella de rendimiento de su declaración de consulta o estructura de tabla.

Dirección del sitio web oficial

Qué puedes hacer

  • orden de lectura de la tabla
  • El tipo de operación de la operación de lectura de datos.
  • Qué índices se pueden utilizar
  • qué índices se utilizan realmente
  • Referencias entre tablas
  • Cuántas filas por tabla son consultadas por el optimizador

Cómo jugar

  • explicar + instrucción SQL
  • Información contenida en el plan de ejecución
    • | identificación | seleccionar_tipo | mesa | tabiques | tipo | claves_posibles | clave | key_len | referencia | filas | filtrado | adicionales |
<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.01</span> sec)

mysql<span style="color:#ab5656">></span> explain <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> select_type <span style="color:#ab5656">|</span> <span style="color:#0000ff">table</span>   <span style="color:#ab5656">|</span> type <span style="color:#ab5656">|</span> possible_keys <span style="color:#ab5656">|</span> key  <span style="color:#ab5656">|</span> key_len <span style="color:#ab5656">|</span> <span style="color:#0000ff">ref</span>  <span style="color:#ab5656">|</span> <span style="color:#0000ff">rows</span> <span style="color:#ab5656">|</span> Extra <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> SIMPLE      <span style="color:#ab5656">|</span> tbl_emp <span style="color:#ab5656">|</span> <span style="color:#0000ff">ALL</span>  <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>          <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span>    <span style="color:#ab5656">|</span> <span style="color:#0000ff">NULL</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">8</span> <span style="color:#ab5656">|</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.01</span> sec)
</code></span></span>

②Introducción a la identificación de explicación

El número de serie de la consulta de selección, incluido un conjunto de números, que indica el orden en que se ejecuta la cláusula de selección o la tabla de operaciones en la consulta.

tres condiciones:

  • El id es el mismo, el orden de ejecución es de arriba a abajo

  • El id es diferente. Si es una subconsulta, el número de serie del id aumentará. Cuanto mayor sea el valor del id, mayor será la prioridad y antes se ejecutará.

  • El id es el mismo y diferente, y existen al mismo tiempo

El id es el mismo, el orden de ejecución es de arriba a abajo

El id es diferente. Si es una subconsulta, el número de serie del id aumentará. Cuanto mayor sea el valor del id, mayor será la prioridad y antes se ejecutará.

El id es el mismo y diferente, y existen al mismo tiempo

resumen

  • Si los id son los mismos, pueden considerarse como un grupo y ejecutarse secuencialmente de arriba a abajo;
  • En todos los grupos, cuanto mayor sea el valor de id, mayor será la prioridad y antes se ejecutará. Derivación = DERIVED ( es decir, la tabla virtual ). El 2 en drive2 indica que es una tabla virtual extendida de la tabla con identificación 2
  • Siempre cuanto mayor sea la identificación, antes será la consulta

③Introducción a select_type y tabla de explicación

select_type: el tipo de consulta , que se utiliza principalmente para distinguir consultas complejas, como consultas ordinarias, consultas conjuntas y subconsultas.

¿Qué son los select_types?

  1. SIMPLE: una consulta de selección simple que no contiene subconsultas ni UNIONES.
  2. PRIMARIO: la consulta más externa se marca si la consulta contiene subpartes complejas . (equivalente a cáscaras de huevo, las últimas en cargarse)
  3. SUBCONSULTA: se incluye una subconsulta en la lista SELECCIONAR o DONDE. (yema de huevo, cargada primero)
  4. DERIVADAS: las subconsultas contenidas en la lista FROM están marcadas como DERIVADAS (derivadas). MySQL ejecutará recursivamente estas subconsultas y colocará los resultados en una tabla temporal.
  5. UNION: si el segundo SELECT aparece después de UNION, se marca como UNION; si UNION se incluye en la subconsulta de la cláusula FROM, el SELECT externo se marcará como: DERIVED.
  6. RESULTADO DE UNIÓN: SELECCIONE para obtener resultados de las tablas de UNIÓN.

tabla: Muestra de qué tabla se trata la información de esta fila.

④Introducción al tipo de explicación

Disposición del tipo de acceso

type muestra el tipo de acceso , que es un indicador relativamente importante.Los valores de resultado están en orden de mejor a peor:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index >ALL

De mejor a peor: system>const>eq_ref>ref>range>index>ALL

En términos generales, es necesario asegurarse de que la consulta alcance al menos el nivel de rango, y es mejor llegar a la referencia.

Descripción detallada

  • sistema

La tabla tiene solo una fila de registros (igual a la tabla del sistema), que es una columna especial del tipo const, que normalmente no aparece, y esta también se puede ignorar. ( un registro por tabla )

  • constante

Indica que el índice se encuentra una vez y const se usa para comparar la clave principal o el índice único. Debido a que solo coincide una fila de datos, MySQL puede convertir rápidamente la consulta en una constante si la clave principal se coloca en la lista where. El siguiente sistema se debe a que solo se devolverá un registro como tabla temporal en la consulta coincidente.

  • eq_ref

Escaneo de índice único, para cada clave de índice, solo un registro en la tabla coincide. Común para escaneos de clave principal o índice único.

  • árbitro

El escaneo de índice no único, que devuelve todas las filas que coinciden con un solo valor, es esencialmente un acceso de índice, que devuelve todas las filas que coinciden con un solo valor; sin embargo, puede encontrar varias filas elegibles, por lo que debe ser una combinación de buscar y escanear .

  • rango

Recupera solo el rango dado de filas, usando un índice para seleccionar filas. La columna clave muestra qué índice se usa. Generalmente, hay consultas como between, <, >, in, etc. en su instrucción where. Este escaneo de índice de escaneo de rango es mejor que un escaneo de tabla completa porque solo necesita comenzar en un punto del índice y terminar en otro punto sin escanear todo el índice .

  • índice

Escaneo de índice completo, la diferencia entre índice y TODO es que el tipo de índice solo atraviesa el árbol de índice . Esto suele ser más rápido que ALL, porque el archivo de índice suele ser más pequeño que el archivo de datos (es decir, aunque tanto all como Index leen la tabla completa, index se lee del índice y all se lee del disco duro).

  • TODO

Escaneo de tabla completa, recorrerá la tabla completa para encontrar filas coincidentes.

Observaciones: En términos generales, es necesario asegurarse de que la consulta alcance al menos el nivel de rango, y es mejor alcanzar el nivel de referencia.

⑤ explicar posibles_claves e introducción clave

posibles_claves

Muestra los índices, uno o más, que se pueden aplicar a esta tabla. Si hay un índice en los campos involucrados en la consulta, el índice aparecerá en la lista, pero la consulta no lo utilizará necesariamente .

llave

Si se usa el índice; en el caso de múltiples índices, qué índice usa MySQL.

El índice real a utilizar. Si es NULL, no se utiliza ningún índice

Si se utiliza un índice de cobertura en la consulta, los campos de selección del índice y la consulta se superponen

⑥ Introducción a key_len de explicación

Indica el número de bytes utilizados en el índice, que se pueden utilizar para calcular la longitud del índice utilizado en la consulta. Cuanto más corta sea la longitud , mejor sin pérdida de precisión

El valor que muestra key_len es la longitud máxima posible del campo de índice, no la longitud real utilizada , es decir, key_len se calcula de acuerdo con la definición de la tabla, no se recupera de la tabla.

⑦ref introducción de explicación

Una constante que indica qué columna del índice se usa , si es posible. Qué columnas o constantes se utilizan para buscar valores en columnas indexadas.

Se puede ver en key_len que el índice idx_col1_col2 de la tabla t1 se usa por completo , col1 coincide con col1 de la tabla t2 y col2 coincide con una constante, a saber, 'ac'.

Col1 de la tabla t2 de la biblioteca compartida;

Se indexan los campos asociados con otras tablas en la consulta y las relaciones de clave externa.

⑧filas introducción de explicación

En función de las estadísticas de la tabla y la selección del índice, estime aproximadamente la cantidad de filas que deben leerse para encontrar los registros requeridos . (cuántas filas de cada tabla ha consultado el optimizador)

⑨Explain's Extra introducción

Contiene información adicional importante que no cabe en otras columnas.

① El uso de filesort  escapó por poco de la muerte

Significa que mysql usará un índice externo para ordenar los datos, en lugar de leer de acuerdo con el orden del índice en la tabla. La operación de clasificación que no se puede realizar usando índices en MySQL se llama "clasificación de archivos"  \G significa usar el método de visualización de valores clave para la salida

Solo uso parcialmente el índice que creaste. Solo uso parcialmente el índice cuando consulto, pero no lo uso para ordenar.

Compare los dos siguientes, donde solo col1 y col3 se usan en el anterior, y col2 en el medio ya no está; el último usa col1, col2 y col3;

Comparando la construcción de un índice con una escalera reparada, col1, col2 y col3 han construido tres caminos;

La parte superior es equivalente a realizar otro paso de clasificación por mí mismo, con un lanzamiento interno más, mientras que la parte inferior se hace paso a paso, obviamente la parte inferior es más eficiente que la parte superior.

 ②Uso temporal

Usando tablas temporales para guardar resultados intermedios, MysQL usa tablas temporales cuando ordena los resultados de las consultas . Es común en ordenar por y agrupar consultas agrupar por.

Ordenar por y agrupar por consulta son a menudo los culpables de ralentizar SQL.

La parte superior: se establece el índice compuesto (col1, col2), pero solo se usa col2, y no hay un primer piso sino directamente al segundo piso , por lo que se requiere una tabla temporal y clasificación de archivos para el procesamiento;

La siguiente parte: se establecen col1 y col2, y también se utilizan col1 y col2;

la consulta order by y group by group debe ser preferiblemente en el mismo orden que el índice establecido;

③Uso de índice

Indica que la operación de selección correspondiente utiliza un índice de cobertura (Índice de cobertura) para evitar acceder a las filas de datos de la tabla, ¡y la eficiencia es buena!

Si al mismo tiempo aparece el uso de where, indica que el índice se utiliza para realizar la búsqueda del valor de la clave del índice;

Si no se usa where al mismo tiempo, indica que el índice se usa para leer datos en lugar de realizar acciones de búsqueda.

Si al mismo tiempo aparece el uso de where, indica que el índice se utiliza para realizar la búsqueda del valor de la clave del índice;

Covering Index (Índice de Cobertura), uno dijo cobertura de índice.

1. El índice construido es un índice compuesto (1, 2, 3);

2. No escribió select *, solo marcó select 1 2 3 o select 1 2, este es el índice de cobertura;

Comprender el método 1: la columna de datos seleccionada solo se puede obtener del índice, sin leer la fila de datos, MySQL puede usar el índice para devolver los campos en la lista de selección, sin tener que leer el archivo de datos nuevamente de acuerdo con el índice, en en otras palabras, consulte la columna Para ser sobrescrita por el índice construido .

Comprender el método 2: la indexación es una forma de encontrar filas de manera eficiente, pero las bases de datos generales también pueden usar índices para buscar datos en una columna, por lo que no tiene que leer la fila completa. Después de todo, los nodos de hoja de índice almacenan los datos que indexan; cuando los datos deseados se pueden obtener leyendo el índice, no hay necesidad de leer la fila. Un índice que contiene (o cubre) datos que satisfacen los resultados de la consulta se denomina índice de cobertura.

Aviso:

Si desea utilizar un índice de cobertura, asegúrese de eliminar solo las columnas requeridas en la lista de selección, y no puede seleccionar *, porque

Si todos los campos se indexan juntos, el archivo de índice será demasiado grande y el rendimiento de la consulta disminuirá.

¿Qué es un índice de cobertura?

Un  índice de cobertura  es un índice que contiene todas, y posiblemente más, las columnas que necesita para su consulta.

Por ejemplo, esto:

SELECCIONE *
DESDE el nombre de la tabla
DONDE criterio

normalmente usará índices para acelerar la resolución de qué filas recuperar usando  criterios , pero luego irá a la tabla completa para recuperar las filas.

Sin embargo, si el índice contenía las columnas  column1, column2  y  column3 , entonces este sql:

SELECCIONE columna1, columna2
DESDE nombre de tabla
DONDE criterio

y, siempre que ese índice particular pueda usarse para acelerar la resolución de qué filas recuperar, el índice ya contiene los valores de las columnas que le interesan, por lo que no tendrá que ir a la tabla para recuperar las filas , pero puede producir los resultados directamente desde el índice.

Esto también se puede usar si ve que una consulta típica usa 1-2 columnas para resolver qué filas, y luego generalmente agrega otras 1-2 columnas, podría ser beneficioso agregar esas columnas adicionales (si son todas iguales ) al índice, para que el procesador de consultas pueda obtener todo del índice mismo.

④Usando donde

Indica dónde se utiliza el filtrado.

⑤Uso del búfer de unión

Se utiliza el almacenamiento en caché de conexión.

⑥imposible donde

El valor de la cláusula where siempre es falso y no se puede utilizar para obtener ninguna tupla.

⑦ seleccione tablas optimizadas (no se usa mucho)

En ausencia de la cláusula GROUP BY, se optimiza la operación MIN/MAX en base al índice, o se optimiza la operación COUNT(*) para el motor de almacenamiento MyISAM, no es necesario esperar a la etapa de ejecución para el cálculo, y la optimización se completa en la etapa de generación del plan de ejecución de consultas.

⑧distinto (no se usa mucho)

Optimice la operación distinta y deje de buscar el mismo valor después de encontrar la primera tupla coincidente.

⑩explicar el caso de calentamiento

La primera fila (secuencia de ejecución 4): la columna id es 1, lo que indica que es la primera selección en la unión, la principal de la columna select_type indica que la consulta es una consulta externa y la columna de la tabla está marcada como, lo que indica que el resultado de la consulta proviene de una tabla derivada.Entre ellos, 3 en derivada3 significa que la consulta se deriva de la tercera consulta de selección, es decir, seleccione con id 3. 【seleccione d1.nombre... 】

La segunda fila (secuencia de ejecución 2): id es 3, que es parte de la tercera selección en toda la consulta. Debido a que la consulta está incluida en from, se deriva. 【seleccione id, nombre de t1 donde other_column=''】

La tercera línea (secuencia de ejecución 3): la subconsulta select_type en la lista de selección es subconsulta, que es la segunda selección en toda la consulta. 【seleccione id de t3】

La cuarta línea (secuencia de ejecución 1): select_type es union, lo que indica que la cuarta selección es la segunda selección en la unión y ejecuta [select name, id from t2] primero

La quinta línea (secuencia de ejecución 5): representa la etapa de lectura de filas de la tabla temporal de unión, y <union1,4> en la columna de la tabla indica que la operación de unión se realiza con los resultados de la primera y cuarta selecciones. [Operación de unión de dos resultados]

6- Caso de optimización de índice

① Caso de optimización de tabla única de índice

Crear tabla 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> IF <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">EXISTS</span> article(
	id <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">PRIMARY</span> KEY AUTO_INCREMENT,
	author_id <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	category_id <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	views <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	comments <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	title <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">255</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	content TEXT <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>
);

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> article(author_id,category_id,views,comments,title,content)
<span style="color:#0000ff">VALUES</span>
(<span style="color:#880000">1</span>,<span style="color:#880000">1</span>,<span style="color:#880000">1</span>,<span style="color:#880000">1</span>,<span style="color:#a31515">'1'</span>,<span style="color:#a31515">'1'</span>),
(<span style="color:#880000">2</span>,<span style="color:#880000">2</span>,<span style="color:#880000">2</span>,<span style="color:#880000">2</span>,<span style="color:#a31515">'2'</span>,<span style="color:#a31515">'2'</span>),
(<span style="color:#880000">1</span>,<span style="color:#880000">1</span>,<span style="color:#880000">3</span>,<span style="color:#880000">3</span>,<span style="color:#a31515">'3'</span>,<span style="color:#a31515">'3'</span>);
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> article;
<span style="color:#ab5656">+</span><span style="color:#008000">----+-----------+-------------+-------+----------+-------+---------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> author_id <span style="color:#ab5656">|</span> category_id <span style="color:#ab5656">|</span> views <span style="color:#ab5656">|</span> comments <span style="color:#ab5656">|</span> title <span style="color:#ab5656">|</span> content <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">1</span> <span style="color:#ab5656">|</span>           <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>     <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>        <span style="color:#880000">1</span> <span style="color:#ab5656">|</span> <span style="color:#880000">1</span>     <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>         <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>           <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>     <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>        <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2</span>     <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">3</span> <span style="color:#ab5656">|</span>         <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>           <span style="color:#880000">1</span> <span style="color:#ab5656">|</span>     <span style="color:#880000">3</span> <span style="color:#ab5656">|</span>        <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">3</span>     <span style="color:#ab5656">|</span> <span style="color:#880000">3</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)
</code></span></span>
  • Consulta el article_id con la mayor cantidad de vistas (solo una) cuando category_id es 1 y los comentarios son mayores que 1  .
<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> id, author_id <span style="color:#0000ff">FROM</span> article <span style="color:#0000ff">WHERE</span> category_id <span style="color:#ab5656">=</span> <span style="color:#880000">1</span> <span style="color:#0000ff">AND</span> comments <span style="color:#ab5656">></span> <span style="color:#880000">1</span> <span style="color:#0000ff">ORDER</span> <span style="color:#0000ff">BY</span> views <span style="color:#0000ff">DESC</span> LIMIT <span style="color:#880000">1</span>;
<span style="color:#ab5656">+</span><span style="color:#008000">----+-----------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> author_id <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+-----------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <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>

Conclusión: Obviamente, el tipo es TODO, que es el peor de los casos. El uso de filesort también apareció en Extra, que también es el peor de los casos. La optimización es imprescindible.

iniciar la optimización

Crear nuevo índice + eliminar índice

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">create</span> index idx_article_ccv <span style="color:#0000ff">on</span> article(category_id,comments,views);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.03</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>	
</code></span></span>

O cree un índice con el siguiente sql:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql"><span style="color:#0000ff">ALTER</span> <span style="color:#0000ff">TABLE</span> <span style="color:#a31515">'article'</span> <span style="color:#0000ff">ADD</span> INDEX idx_article_ccv ( <span style="color:#a31515">'category_id , '</span>comments<span style="color:#a31515">', '</span>views<span style="color:#a31515">' );
</span></code></span></span>

Efecto después de la creación

Todavía existe el Uso de clasificación de archivos en Extra, y la creación de este índice tiene poco efecto.

Si los comentarios > 1 se reemplazan por comentarios = 1, el uso de clasificación de archivos puede desaparecer, pero no cumple con los requisitos del tema.

Dado que crear este índice es de poca utilidad, elimínelo.

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">DROP</span> INDEX idx_article_ccv <span style="color:#0000ff">ON</span> article;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

razón

el tipo se convierte en rango, lo cual es tolerable. Pero el uso de la clasificación de archivos adicional sigue siendo inaceptable.

Pero ya hemos construido un índice, ¿por qué es inútil?

Esto se debe a que, según el principio de funcionamiento del índice BTree:

  • Ordenar category_id primero
  • Si se encuentra el mismo category_id, ordene los comentarios
  • Si se encuentran los mismos comentarios, las vistas se ordenan.

Cuando el campo de comentarios está en el medio del índice conjunto, debido a que la condición de los comentarios > 1 es un valor de rango (el llamado rango), el índice después del rango dejará de ser válido y MySQL no puede usar el índice para recuperar el siguiente parte de vistas, es decir, la consulta de tipo de rango Campo siguiente de índice no válido.

Mejorar

En comparación con el índice creado la última vez, esta vez no se crea ningún índice para el campo de comentarios.

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">create</span> index idx_article_cv <span style="color:#0000ff">on</span> article(category_id, views);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

explique de nuevo

<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> id, author_id <span style="color:#0000ff">FROM</span> article <span style="color:#0000ff">WHERE</span> category_id <span style="color:#ab5656">=</span> <span style="color:#880000">1</span> <span style="color:#0000ff">AND</span> comments <span style="color:#ab5656">></span> <span style="color:#880000">1</span> <span style="color:#0000ff">ORDER</span> <span style="color:#0000ff">BY</span> views <span style="color:#0000ff">DESC</span> LIMIT <span style="color:#880000">1</span>;
</code></span></span>

Se puede ver que el tipo ha cambiado a ref, y el Uso de clasificación de archivos en Extra ha desaparecido, y el resultado es muy ideal.

Resumir:

¡Intente no indexar los campos de consulta del tipo de rango (generalmente, las consultas entre, <, >, en, etc. aparecen en su instrucción where)!

②Caso de optimización de indexación de dos tablas

SQL nuevo

<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> IF <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">EXISTS</span> class(
	id <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	card <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY(id)
);

<span style="color:#0000ff">CREATE</span> <span style="color:#0000ff">TABLE</span> IF <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">EXISTS</span> book(
	bookid <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	card <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY(bookid)
);

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> class(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> book(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
</code></span></span>

El resultado después de la creación:

<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> class;
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> card <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">17</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">2</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">18</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">4</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">4</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">8</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">9</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">1</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">18</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">6</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">15</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">15</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">12</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">15</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">18</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">2</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">18</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">5</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">7</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">1</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span> <span style="color:#880000">21</span> <span style="color:#ab5656">|</span>    <span style="color:#880000">2</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+</span>
<span style="color:#880000">21</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> book;
<span style="color:#ab5656">+</span><span style="color:#008000">--------+------+</span>
<span style="color:#ab5656">|</span> bookid <span style="color:#ab5656">|</span> card <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">8</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">14</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">3</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">16</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">8</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">12</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">17</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">8</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">10</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">3</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">4</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">12</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">9</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">7</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">6</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">8</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">3</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">11</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">5</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">11</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>

Comience el análisis de explicación. Las dos tablas tienen claves primarias y externas. ¿A qué tabla se debe agregar el índice?

<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> class <span style="color:#0000ff">LEFT</span> <span style="color:#0000ff">JOIN</span> book <span style="color:#0000ff">ON</span> class.card <span style="color:#ab5656">=</span> book.card;
</code></span></span>

¡Todos los tipos son todos, deben optimizarse y la cantidad de registros que se consultarán es 21 + 20!

Crear un índice para book.card

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">ALTER</span> <span style="color:#0000ff">TABLE</span> `book` <span style="color:#0000ff">ADD</span> INDEX Y(`card`);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

explicar el análisis de nuevo

<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> class <span style="color:#0000ff">LEFT</span> <span style="color:#0000ff">JOIN</span> book <span style="color:#0000ff">ON</span> class.card <span style="color:#ab5656">=</span> book.card;
</code></span></span>

Puede ver que el tipo de la segunda línea ha cambiado a ref y el número de filas ha disminuido, por lo que la optimización es más obvia. Esto está determinado por la función de unión izquierda. La característica de LEFT JOIN es que la tabla de la izquierda tiene todo, las condiciones se utilizan para determinar cómo buscar filas de la tabla de la derecha, y la izquierda debe tenerlas, por lo que la derecha es nuestro punto clave, y se debe establecer un índice. en la tabla de la derecha.

eliminar crear índice para book.card

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">drop</span> index y <span style="color:#0000ff">on</span> book;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.02</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

Crear un índice para class.card

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">ALTER</span> <span style="color:#0000ff">TABLE</span> `class` <span style="color:#0000ff">ADD</span> INDEX Y(`card`);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

explicar el análisis de nuevo

<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> class <span style="color:#0000ff">LEFT</span> <span style="color:#0000ff">JOIN</span> book <span style="color:#0000ff">ON</span> class.card <span style="color:#ab5656">=</span> book.card;
</code></span></span>

Se puede ver que el lado derecho es nuestro punto clave Para optimizar, necesitamos construir un índice en la tabla derecha.

Luego cambiamos a la consulta de combinación derecha RIGHT JOIN

<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> class <span style="color:#0000ff">right</span> <span style="color:#0000ff">JOIN</span> book <span style="color:#0000ff">ON</span> class.card <span style="color:#ab5656">=</span> book.card;
</code></span></span>

Cambiar a la izquierda es nuestro punto clave Para optimizar, necesitamos construir un índice en la tabla de la izquierda.

resumen

Se optimizan dos tablas de índice, únase a la izquierda de la tabla derecha para crear un índice, únase a la derecha de la tabla izquierda para crear un índice.

③Caso de optimización de índice de tres tablas

SQL nuevo

<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> IF <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">EXISTS</span> phone(
	phoneid <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	card <span style="color:#a31515">INT</span>(<span style="color:#880000">10</span>) UNSIGNED <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY(phoneid)
)ENGINE<span style="color:#ab5656">=</span>INNODB;

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> phone(card) <span style="color:#0000ff">VALUES</span>(<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">20</span>)));
</code></span></span>

despues de los efectos

<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> phone;
<span style="color:#ab5656">+</span><span style="color:#008000">---------+------+</span>
<span style="color:#ab5656">|</span> phoneid <span style="color:#ab5656">|</span> card <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">10</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">13</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">17</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">5</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">12</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">7</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">15</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">17</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">17</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">14</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">19</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">13</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">5</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">8</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">2</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">8</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">11</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">14</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">13</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">5</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>

Vuelva a utilizar las tablas de libros y clases de la sección anterior y elimine sus índices originales.

<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> index <span style="color:#0000ff">from</span> class;
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">drop</span> index y <span style="color:#0000ff">on</span> class;
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.02</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> index <span style="color:#0000ff">from</span> book;
</code></span></span>

Cree nuevos índices para phone.card y book.card.

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">alter</span> <span style="color:#0000ff">table</span> `phone` <span style="color:#0000ff">add</span> index z(`card`);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>

mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">alter</span> <span style="color:#0000ff">table</span> `book` <span style="color:#0000ff">add</span> index y(`card`);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.01</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

explique Conexión de tres tablas Tres tablas están asociadas al menos dos veces, ¿en qué tabla debe construirse el índice?

<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> class <span style="color:#0000ff">LEFT</span> <span style="color:#0000ff">JOIN</span> book <span style="color:#0000ff">ON</span> class.card <span style="color:#ab5656">=</span> book.card <span style="color:#0000ff">LEFT</span> <span style="color:#0000ff">JOIN</span> phone <span style="color:#0000ff">ON</span> book.card <span style="color:#ab5656">=</span> phone.card;
</code></span></span>

Los tipos de las dos últimas líneas son ref y las filas totales están bien optimizadas y el efecto es bueno. Por lo tanto, es mejor establecer el índice en el campo que debe consultarse con frecuencia.

en conclusión

Optimización de la instrucción Join

Minimice la cantidad total de bucles de NestedLoop en la instrucción Join ( no se una demasiado ni anide ): " Use siempre un conjunto de resultados pequeño para impulsar un conjunto de resultados grande ".

Priorice la optimización del bucle interno de NestedLoop para asegurarse de que el campo de condición de combinación en la tabla controlada en la declaración de combinación se haya indexado.

Cuando no se puede garantizar que el campo Condición de combinación de la tabla controlada esté indexado y los recursos de memoria son suficientes, no sea demasiado tacaño con la configuración de JoinBuffer (en el archivo my.cnf).

7- Invalidación del índice

Varias razones para la falla del índice: (debe evitarse)

  1. favoritos de coincidencia de valor completo
  2. Regla del mejor prefijo a la izquierda: si se indexan varias columnas, siga la regla del prefijo más a la izquierda. Significa que la consulta comienza desde la columna frontal más a la izquierda del índice y no omite la columna central del índice compuesto .
  3. Si no se realizan operaciones (cálculo, función, conversión de tipo (automática o manual)) en la columna de índice, el índice fallará y cambiará a un escaneo completo de la tabla.
  4. El motor de almacenamiento no puede usar columnas a la derecha de la condición de rango en el índice.
  5. Intente usar el índice de cobertura (consulta que solo accede al índice (la columna de índice es consistente con la columna de consulta)) y reduzca la selección *.
  6. Mysql no puede usar el índice cuando no es igual (!= o <>), lo que provocará un escaneo completo de la tabla.
  7. es nulo, no es nulo tampoco puede usar el índice.
  8. Like comienza con un comodín ('%abc...'), y la falla del índice mysql se convertirá en una operación de escaneo de tabla completa.
  9. Los índices sin comillas simples no son válidos para cadenas.
  10. Use o con moderación, y el índice fallará cuando lo use para conectarse.

①El valor total coincide con mi favorito

SQL nuevo

<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> staffs(
	id <span style="color:#a31515">INT</span> <span style="color:#0000ff">PRIMARY</span> KEY AUTO_INCREMENT,
	`name` <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">24</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span><span style="color:#a31515">''</span> COMMENT<span style="color:#a31515">'姓名'</span>,
	`age` <span style="color:#a31515">INT</span> <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span> <span style="color:#880000">0</span> COMMENT<span style="color:#a31515">'年龄'</span>,
	`pos` <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><span style="color:#a31515">''</span> COMMENT<span style="color:#a31515">'职位'</span>,
	`add_time` <span style="color:#a31515">TIMESTAMP</span> <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">CURRENT_TIMESTAMP</span> COMMENT<span style="color:#a31515">'入职时间'</span>
)CHARSET utf8 COMMENT<span style="color:#a31515">'员工记录表'</span>;

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> staffs(`name`,`age`,`pos`,`add_time`) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'z3'</span>,<span style="color:#880000">22</span>,<span style="color:#a31515">'manager'</span>,NOW());
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> staffs(`name`,`age`,`pos`,`add_time`) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'July'</span>,<span style="color:#880000">23</span>,<span style="color:#a31515">'dev'</span>,NOW());
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> staffs(`name`,`age`,`pos`,`add_time`) <span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'2000'</span>,<span style="color:#880000">23</span>,<span style="color:#a31515">'dev'</span>,NOW());

<span style="color:#0000ff">ALTER</span> <span style="color:#0000ff">TABLE</span> staffs <span style="color:#0000ff">ADD</span> INDEX index_staffs_nameAgePos(`name`,`age`,`pos`);
</code></span></span>

tres condiciones:

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;
</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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span>;
</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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</code></span></span>

 Tenga en cuenta que el orden en que construimos el índice en la siguiente explicación es: (nombre, edad, pos)

<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> staffs <span style="color:#0000ff">WHERE</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</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> staffs <span style="color:#0000ff">WHERE</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</code></span></span>

Los dos índices anteriores no son válidos. Si el orden de los campos de consulta no es coherente con el orden de creación del índice, se debe cumplir la regla del prefijo mejor a la izquierda.

② Regla del mejor prefijo a la izquierda

  • Si se indexan varias columnas, se debe seguir la regla del prefijo más a la izquierda. Hace referencia a la consulta que comienza en la columna frontal más a la izquierda del índice y no salta columnas en el índice .

¡El hermano mayor que toma la iniciativa no puede morir!  ¡El hermano del medio no se puede romper!

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</code></span></span>

ref tiene solo una const, lo que significa que lo anterior solo usa parte del índice, y solo el primer índice, nombre.

② Realice operaciones adicionales en la columna de índice

Si no se realizan operaciones (cálculo, función, conversión de tipo (automática o manual)) en la columna de índice, el índice fallará y cambiará a un escaneo completo de la tabla.

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> <span style="color:#0000ff">left</span>(NAME,<span style="color:#880000">4</span>)<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;
</code></span></span>

③ Limitar el rango de una columna en el índice compuesto

El motor de almacenamiento no puede usar las columnas del lado derecho de la condición de rango en el índice (entiendo que limitar el rango de un campo en el índice compuesto hará que el índice falle, es decir, >, <, entre... y... se utilizan con precaución en un campo del índice compuesto).

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">></span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</code></span></span>

Después de cambiar de edad=25 a edad>25, el tipo cambia de referencia a rango.

④seleccione *

Intente usar el índice de cobertura (consulta que solo accede al índice (la columna de índice y la columna de consulta son consistentes)), reduzca la selección *

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'manager'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> name,age,pos <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;
</code></span></span>

Será mejor que lo consigamos bajo demanda y usemos menos seleccione *

<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> name,age,pos <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> name,age,pos <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">></span><span style="color:#880000">25</span> <span style="color:#0000ff">AND</span> pos<span style="color:#ab5656">=</span><span style="color:#a31515">'dev'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> name <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">AND</span> age<span style="color:#ab5656">=</span><span style="color:#880000">25</span>;
</code></span></span>

⑤!= o <>

Mysql no puede usar el índice cuando no es igual (!= o <>), lo que provocará un escaneo completo de la tabla.

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">!=</span><span style="color:#a31515">'July'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656"><></span><span style="color:#a31515">'July'</span>;
</code></span></span>

⑥es nulo o no es nulo

es nulo, no es nulo tampoco puede usar el índice

<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> staffs <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">is</span> <span style="color:#0000ff">null</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">is</span> <span style="color:#0000ff">not</span> <span style="color:#0000ff">null</span>;
</code></span></span>

Extra se imprime como Imposible DONDE porque estamos creando la tabla de personal y configurando el atributo del campo de nombre para que no sea nulo.

Lo siguiente demuestra adicionalmente el caso donde Extra es Imposible DONDE.

<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> staffs <span style="color:#0000ff">WHERE</span> <span style="color:#880000">1</span><span style="color:#ab5656">=</span><span style="color:#880000">1</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> <span style="color:#880000">1</span><span style="color:#ab5656">!=</span><span style="color:#880000">1</span>;
</code></span></span>

⑦ como cadenas que comienzan con comodín %

like comienza con un comodín % ('%abc...'), y la falla del índice mysql se convertirá en una operación de escaneo de tabla completa.

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">like</span> <span style="color:#a31515">'%July%'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">like</span> <span style="color:#a31515">'%July'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">like</span> <span style="color:#a31515">'July%'</span>;
</code></span></span>

Pregunta: ¿Cómo resolver el problema de que el índice no se usa cuando se usa '%string%'?

  • Puede utilizar el índice de clave principal
  • Se recomienda utilizar un índice de cobertura y el campo de consulta debe ser un campo de índice de cobertura
  • Cuando el campo al que apunta el índice de cobertura es un campo de varchar (380) o más de 380, ¡el índice de cobertura fallará!

SQL nuevo

<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> `tbl_user`(
	`id` <span style="color:#a31515">INT</span>(<span style="color:#880000">11</span>) <span style="color:#0000ff">NOT</span> <span style="color:#0000ff">NULL</span> AUTO_INCREMENT,
	`name` <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">20</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	`age`<span style="color:#a31515">INT</span>(<span style="color:#880000">11</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	`email` <span style="color:#a31515">VARCHAR</span>(<span style="color:#880000">20</span>) <span style="color:#0000ff">DEFAULT</span> <span style="color:#0000ff">NULL</span>,
	<span style="color:#0000ff">PRIMARY</span> KEY(`id`)
)ENGINE<span style="color:#ab5656">=</span>INNODB AUTO_INCREMENT<span style="color:#ab5656">=</span><span style="color:#880000">1</span> <span style="color:#0000ff">DEFAULT</span> CHARSET<span style="color:#ab5656">=</span>utf8;

<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_user(`name`,`age`,`email`)<span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'1aa1'</span>,<span style="color:#880000">21</span>,<span style="color:#a31515">'[email protected]'</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_user(`name`,`age`,`email`)<span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'2bb2'</span>,<span style="color:#880000">23</span>,<span style="color:#a31515">'[email protected]'</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_user(`name`,`age`,`email`)<span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'3cc3'</span>,<span style="color:#880000">24</span>,<span style="color:#a31515">'[email protected]'</span>);
<span style="color:#0000ff">INSERT</span> <span style="color:#0000ff">INTO</span> tbl_user(`name`,`age`,`email`)<span style="color:#0000ff">VALUES</span>(<span style="color:#a31515">'4dd4'</span>,<span style="color:#880000">26</span>,<span style="color:#a31515">'[email protected]'</span>);
</code></span></span>
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> tbl_user;
<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> age  <span style="color:#ab5656">|</span> email     <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">1</span>aa1 <span style="color:#ab5656">|</span>   <span style="color:#880000">21</span> <span style="color:#ab5656">|</span> a<span style="color:#008000">@163</span>.com <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">2</span>bb2 <span style="color:#ab5656">|</span>   <span style="color:#880000">23</span> <span style="color:#ab5656">|</span> b<span style="color:#008000">@163</span>.com <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">3</span>cc3 <span style="color:#ab5656">|</span>   <span style="color:#880000">24</span> <span style="color:#ab5656">|</span> c<span style="color:#008000">@163</span>.com <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">4</span>dd4 <span style="color:#ab5656">|</span>   <span style="color:#880000">26</span> <span style="color:#ab5656">|</span> d<span style="color:#008000">@163</span>.com <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+------+-----------+</span>
<span style="color:#880000">4</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>

Antes de crear un índice, eche un vistazo a la siguiente explicación:

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">EXPLAIN <span style="color:#0000ff">SELECT</span> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> id <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age,email <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</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> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</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> id <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</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> id,NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</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> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age,email <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</code></span></span>

No se crea ningún índice y se busca en toda la tabla.

Ahora crea el índice

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">CREATE</span> INDEX idx_user_nameAge <span style="color:#0000ff">ON</span> tbl_user(NAME,age);
Query OK, <span style="color:#880000">0</span> <span style="color:#0000ff">rows</span> affected (<span style="color:#880000">0.02</span> sec)
Records: <span style="color:#880000">0</span>  Duplicates: <span style="color:#880000">0</span>  Warnings: <span style="color:#880000">0</span>
</code></span></span>

Luego ejecute la serie anterior de explicaciones.

<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> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</code></span></span>

Se puede ver que usando el índice (índice de cobertura)

<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> id <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</code></span></span>

Se puede ver que se utiliza el índice (índice de cobertura)

<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> id,NAME <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;

mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> NAME,age <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</code></span></span>

Se puede ver que se utiliza el índice (índice de cobertura)

<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> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
mysql<span style="color:#ab5656">></span> EXPLAIN <span style="color:#0000ff">SELECT</span> id,NAME,age,email <span style="color:#0000ff">FROM</span> tbl_user <span style="color:#0000ff">WHERE</span> NAME <span style="color:#0000ff">LIKE</span> <span style="color:#a31515">'%aa%'</span>;
</code></span></span>

Se puede ver que el índice ya no se usa, y si hay un campo de correo electrónico, solo se puede buscar en toda la tabla.

2) Índice de cobertura (Índice de cobertura)

Se llama índice de cobertura. De manera análoga a las ollas y las tapas de las ollas, el campo de consulta debe ser menor o igual que el índice creado ( nota: la identificación de la clave principal nace con su propio índice, por lo que el campo de la clave principal no tiene efecto en el índice de cobertura ).

Comprender el método 1: la columna de datos seleccionada solo se puede obtener del índice, sin leer la fila de datos, MySQL puede usar el índice para devolver los campos en la lista de selección, sin tener que leer el archivo de datos nuevamente de acuerdo con el índice, en en otras palabras, consulte la columna Para ser sobrescrita por el índice construido .

Comprender el método 2: la indexación es una forma de encontrar filas de manera eficiente, pero las bases de datos generales también pueden usar índices para buscar datos en una columna, por lo que no tiene que leer la fila completa. Después de todo, los nodos de hoja de índice almacenan los datos que indexan; cuando los datos deseados se pueden obtener leyendo el índice, no hay necesidad de leer la fila. Un índice que contiene (o cubre) datos que satisfacen los resultados de la consulta se denomina índice de cobertura.

Aviso:

Si desea utilizar un índice de cobertura, debe prestar atención a extraer solo las columnas requeridas de la lista de selección, y no puede seleccionar *, porque si todos los campos se indexan juntos, el archivo de índice será demasiado grande y el rendimiento de la consulta se verá afectado. disminuir.

resumen

¿Cómo resolver el problema de que el índice no se usa cuando se gusta '%string%'? Índice compuesto, luego índice de cobertura.

⑧ cadena de números sin comillas simples

La cadena de números no está indexada con comillas simples . ¡El tipo varchar debe agregarse con comillas simples! ! !

La capa inferior de MySQL envía conversión de tipo implícita, lo que afecta la eficiencia.

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#880000">2000</span>;
<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> age <span style="color:#ab5656">|</span> pos <span style="color:#ab5656">|</span> add_time            <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+-----+-----+---------------------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000</span> <span style="color:#ab5656">|</span>  <span style="color:#880000">23</span> <span style="color:#ab5656">|</span> dev <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-03</span> <span style="color:#880000">14</span>:<span style="color:#880000">03</span>:<span style="color:#880000">18</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">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'2000'</span>;
<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> age <span style="color:#ab5656">|</span> pos <span style="color:#ab5656">|</span> add_time            <span style="color:#ab5656">|</span>
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+-----+-----+---------------------+</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> <span style="color:#880000">2000</span> <span style="color:#ab5656">|</span>  <span style="color:#880000">23</span> <span style="color:#ab5656">|</span> dev <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-03</span> <span style="color:#880000">14</span>:<span style="color:#880000">03</span>:<span style="color:#880000">18</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)

mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#880000">2000</span>;
mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'2000'</span>;
</code></span></span>

⑨Usar palabra clave O

Use o con moderación, y el índice fallará cuando lo use para conectarse .

<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> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">or</span> name<span style="color:#ab5656">=</span><span style="color:#a31515">'z3'</span>;
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">SELECT</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">FROM</span> staffs <span style="color:#0000ff">WHERE</span> NAME<span style="color:#ab5656">=</span><span style="color:#a31515">'July'</span> <span style="color:#0000ff">or</span> name<span style="color:#ab5656">=</span><span style="color:#a31515">'z3'</span>;
<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> age <span style="color:#ab5656">|</span> pos     <span style="color:#ab5656">|</span> add_time            <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">22</span> <span style="color:#ab5656">|</span> manager <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-03</span> <span style="color:#880000">14</span>:<span style="color:#880000">03</span>:<span style="color:#880000">18</span> <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> July <span style="color:#ab5656">|</span>  <span style="color:#880000">23</span> <span style="color:#ab5656">|</span> dev     <span style="color:#ab5656">|</span> <span style="color:#880000">2021</span><span style="color:#880000">-04</span><span style="color:#880000">-03</span> <span style="color:#880000">14</span>:<span style="color:#880000">03</span>:<span style="color:#880000">18</span> <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">0.00</span> sec)
</code></span></span>

⑩Pequeño resumen después de donde antes de ordenar por

pequeño resumen

Supongamos que el índice creado: index(a,b,c)

donde declaración si se utiliza el índice
donde a = 3 Y, utilizado hasta un
donde a = 3 y b = 5 Y, solía a, b
donde a = 3 y b = 5 y c = 4 Y, solía a, b, c
donde b = 3 o donde b = 3 y c = 4 o donde c = 4 N ( sin hermano mayor a )
donde a = 3 y c = 5 Se usa A, pero no se permite c, y b se interrumpe
donde a = 3 y b > 4 y c = 5 Cuando se usan a y b, c no se puede usar después del rango, y b se rompe
donde a es nulo y b no es nulo es nulo admite índice pero no es nulo no lo hace, por lo que a puede usar índice, pero b no puede
donde un <> 3 no se puede usar el índice
donde abs(a) =3 no se puede usar el índice
donde a = 3 y b como 'kk%' y c = 4 Y, solía a, b, c
donde a = 3 y b como '%kk' y c = 4 S, solo usa un
donde a = 3 y b como '%kk%' y c = 4 S, solo usa un
donde a = 3 y b como 'k%kk%' y c = 4 Y, solía a, b, c

Fórmula de resumen de optimización

El valor completo coincide con mi favorito, y se debe seguir el prefijo más a la izquierda;

El hermano principal no puede morir, y el hermano del medio no puede ser quebrantado;

Menos cálculos en la columna de índice, todos inválidos después del rango;

LIKE escribe el porcentaje más a la derecha y no escribe * en el índice de cobertura;

También hay OR entre valores nulos desiguales, y se debe prestar atención al impacto de los índices;

Las comillas VAR no se pueden perder, la optimización de SQL tiene un truco.

8- Análisis de las preguntas de la entrevista índice

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-java">create table <span style="color:#a31515">test03</span>(
    id <span style="color:#a31515">int</span> primary key not <span style="color:#a31515">null</span> auto_increment,
    c1 <span style="color:#a31515">char</span>(<span style="color:#880000">10</span>),
    c2 <span style="color:#a31515">char</span>(<span style="color:#880000">10</span>),
    c3 <span style="color:#a31515">char</span>(<span style="color:#880000">10</span>),
    c4 <span style="color:#a31515">char</span>(<span style="color:#880000">10</span>),
    c5 <span style="color:#a31515">char</span>(<span style="color:#880000">10</span>)
);

insert into <span style="color:#a31515">test03</span>(c1,c2,c3,c4,c5) values (<span style="color:#a31515">'a1'</span>,<span style="color:#a31515">'a2'</span>,<span style="color:#a31515">'a3'</span>,<span style="color:#a31515">'a4'</span>,<span style="color:#a31515">'a5'</span>);
insert into <span style="color:#a31515">test03</span>(c1,c2,c3,c4,c5) values (<span style="color:#a31515">'b1'</span>,<span style="color:#a31515">'b2'</span>,<span style="color:#a31515">'b3'</span>,<span style="color:#a31515">'b4'</span>,<span style="color:#a31515">'b5'</span>);
insert into <span style="color:#a31515">test03</span>(c1,c2,c3,c4,c5) values (<span style="color:#a31515">'c1'</span>,<span style="color:#a31515">'c2'</span>,<span style="color:#a31515">'c3'</span>,<span style="color:#a31515">'c4'</span>,<span style="color:#a31515">'c5'</span>);
insert into <span style="color:#a31515">test03</span>(c1,c2,c3,c4,c5) values (<span style="color:#a31515">'d1'</span>,<span style="color:#a31515">'d2'</span>,<span style="color:#a31515">'d3'</span>,<span style="color:#a31515">'d4'</span>,<span style="color:#a31515">'d5'</span>);
insert into <span style="color:#a31515">test03</span>(c1,c2,c3,c4,c5) values (<span style="color:#a31515">'e1'</span>,<span style="color:#a31515">'e2'</span>,<span style="color:#a31515">'e3'</span>,<span style="color:#a31515">'e4'</span>,<span style="color:#a31515">'e5'</span>);

create index idx_test03_c1234 on <span style="color:#a31515">test03</span>(c1,c2,c3,c4);
</code></span></span>
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03;
<span style="color:#ab5656">+</span><span style="color:#008000">----+------+------+------+------+------+</span>
<span style="color:#ab5656">|</span> id <span style="color:#ab5656">|</span> c1   <span style="color:#ab5656">|</span> c2   <span style="color:#ab5656">|</span> c3   <span style="color:#ab5656">|</span> c4   <span style="color:#ab5656">|</span> c5   <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> a1   <span style="color:#ab5656">|</span> a2   <span style="color:#ab5656">|</span> a3   <span style="color:#ab5656">|</span> a4   <span style="color:#ab5656">|</span> a5   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">2</span> <span style="color:#ab5656">|</span> b1   <span style="color:#ab5656">|</span> b2   <span style="color:#ab5656">|</span> b3   <span style="color:#ab5656">|</span> b4   <span style="color:#ab5656">|</span> b5   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">3</span> <span style="color:#ab5656">|</span> c1   <span style="color:#ab5656">|</span> c2   <span style="color:#ab5656">|</span> c3   <span style="color:#ab5656">|</span> c4   <span style="color:#ab5656">|</span> c5   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">4</span> <span style="color:#ab5656">|</span> d1   <span style="color:#ab5656">|</span> d2   <span style="color:#ab5656">|</span> d3   <span style="color:#ab5656">|</span> d4   <span style="color:#ab5656">|</span> d5   <span style="color:#ab5656">|</span>
<span style="color:#ab5656">|</span>  <span style="color:#880000">5</span> <span style="color:#ab5656">|</span> e1   <span style="color:#ab5656">|</span> e2   <span style="color:#ab5656">|</span> e3   <span style="color:#ab5656">|</span> e4   <span style="color:#ab5656">|</span> e5   <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.00</span> sec)
mysql<span style="color:#ab5656">></span> <span style="color:#0000ff">show</span> index <span style="color:#0000ff">from</span> test03;
</code></span></span>

Pregunta: ¿Hemos creado un índice compuesto idx_test03_c1234 (c1, c2, c3, c4) y analizamos el uso del índice de acuerdo con el siguiente SQL?

① Caso 1

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span>;
explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span>;
explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span>;
</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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span>;

mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span>;

mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;

mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span>;
#换一下条件顺序
mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span>;
</code></span></span>

¿Por qué construyo 1, 2, 3, 4, pero consulto 4, 3, 2, 1, puedo seguir usando el índice? El Optimizer en la segunda capa de MySQL ajustará y optimizará automáticamente los comandos en MySQL. .

②Caso 2

rango limitado

<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">></span><span style="color:#a31515">'a3'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span>;
explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">></span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">></span><span style="color:#a31515">'a3'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span>;

mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">></span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</code></span></span>

③Caso 3

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c3;
</code></span></span>

c3 actúa ordenando en lugar de buscar

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c3;
</code></span></span>

Las dos explicaciones anteriores son iguales. Las dos explicaciones anteriores: no tiene nada que ver con c4='a4',  solo ordena en el tercer piso (c3), no lo busques.

Orden por c3 se reemplaza por orden por c4

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c4;
</code></span></span>

Utilice Uso de clasificación de archivos. El hermano en el medio está roto, pero MySQL tiene que entregar los resultados, por lo que tiene que ordenar usando filesort una vez

④ El orden de campo de order by y el orden de los campos de índice

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c5<span style="color:#ab5656">=</span><span style="color:#a31515">'a5'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c2,c3;
</code></span></span>

Solo se usa un índice de campo de c1, pero c2 y c3 se usan para ordenar, no para ordenar archivos.

Reemplaza orden por c2,c3 con orden por c3,c2.

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c5<span style="color:#ab5656">=</span><span style="color:#a31515">'a5'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c3,c2;
</code></span></span>

Apareció Filesort, el índice que construimos es 1234, no está en orden, 3, 2 están invertidos.

⑤Casos especiales en orden por

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c2,c3;mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c5<span style="color:#ab5656">=</span><span style="color:#a31515">'a5'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c2,c3;
</code></span></span>

Use c1 y c2 para indexar, pero c2 y c3 se usan para ordenar, no filesort  y c5='a5' no tienen nada que hacer

El orden por del segundo SQL anterior viola el orden de creación de índices, entonces, ¿por qué no se usa el ordenamiento de archivos?

Porque:

  • En general: siempre que el orden por orden de campo no sea coherente con el orden en que se crea el índice, se generará el uso de filesort;

  • El caso especial es: el campo ordenado ya es una constante, y el caso anterior es la ordenación de los dos campos c3 y c2='a2'.

Instrucciones de comparación:

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2<span style="color:#ab5656">=</span><span style="color:#a31515">'a2'</span> <span style="color:#0000ff">and</span> c5<span style="color:#ab5656">=</span><span style="color:#a31515">'a5'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c3,c2;
mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c5<span style="color:#ab5656">=</span><span style="color:#a31515">'a5'</span> <span style="color:#0000ff">order</span> <span style="color:#0000ff">by</span> c3,c2;
</code></span></span>

Omita c2, use c3 y aparece Usar ordenación de archivos.

⑥agrupar por

<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> c2,c3;
mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c4<span style="color:#ab5656">=</span><span style="color:#a31515">'a4'</span> <span style="color:#0000ff">group</span> <span style="color:#0000ff">by</span> c3,c2;
</code></span></span>

En la superficie, agrupar por es agrupar, pero debe ordenarse antes de agrupar, por lo que el principio de optimización de agrupar por es casi el mismo que ordenar por

Valor fijo, rango o clasificación, generalmente ordenar por es dar un rango

Básicamente, el grupo por debe ordenarse, y habrá una tabla temporal (el índice creado no se puede arreglar, MySQL se ordena nuevamente internamente)

consejos generales

  • Para los índices de clave única, intente elegir un índice con una mejor capacidad de filtrado para la consulta actual.
  • Al seleccionar un índice combinado, el campo con la mejor filtrabilidad en la Consulta actual está en el orden de los campos de índice, y cuanto más a la izquierda .
  • Al elegir un índice compuesto, intente elegir un índice que pueda contener más campos en la cláusula where de la consulta actual.
  • Intente seleccionar el índice apropiado analizando la información estadística y ajustando el método de escritura de la consulta.

9- Suplemento de preguntas y respuestas de optimización de índices y fórmula de resumen

Supongamos índice(a, b, c)

  • Y, solía a, b, c
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">#百分号在右边,相当于说左边有常量了,实际上用到了c2索引mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2 <span style="color:#0000ff">like</span> <span style="color:#a31515">'kk%'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</code></span></span>

  • Y, utilizado hasta un
<span style="color:#2c2c2c"><span style="background-color:#ffffff"><code class="language-sql">#根据百分号在左边 c2直接用不了,导致中间兄弟断了,所以c3也用不了mysql<span style="color:#ab5656">></span> explain <span style="color:#0000ff">select</span> <span style="color:#ab5656">*</span> <span style="color:#0000ff">from</span> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2 <span style="color:#0000ff">like</span> <span style="color:#a31515">'%kk'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</code></span></span>

  • Y, utilizado hasta un
<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2 <span style="color:#0000ff">like</span> <span style="color:#a31515">'%kk%'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</code></span></span>

  • Y, solía a, b, c
<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> test03 <span style="color:#0000ff">where</span> c1<span style="color:#ab5656">=</span><span style="color:#a31515">'a1'</span> <span style="color:#0000ff">and</span> c2 <span style="color:#0000ff">like</span> <span style="color:#a31515">'k%kk%'</span> <span style="color:#0000ff">and</span> c3<span style="color:#ab5656">=</span><span style="color:#a31515">'a3'</span>;
</code></span></span>

Supongo que te gusta

Origin blog.csdn.net/m0_60961651/article/details/132272812
Recomendado
Clasificación