Tres formas de unirse
Unión de bucle anidado simple
No se utiliza el mysql menos eficiente.
Unión de bucle anidado en bloque
show variables like '%join_buffer%'
Unión de bucle anidado de índice
CREATE TABLE `t2` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`)
) ENGINE=InnoDB;
drop procedure idata;
delimiter ;;
create procedure idata()
begin
declare i int;
set i=1;
while(i<=1000)do
insert into t2 values(i, i, i);
set i=i+1;
end while;
end;;
delimiter ;
call idata();
create table t1 like t2;
insert into t1 (select * from t2 where id<=100)
select * from t1 straight_join t2 on (t1.a=t2.b);
Suponga que el número de filas en la tabla de unidades es M, por lo que es necesario escanear N filas de la tabla de unidades
El número de filas en la tabla controlada es N. Cada vez que se busca una fila de datos en la tabla controlada, primero se busca el índice a y luego se busca el índice de clave principal. La complejidad aproximada de cada búsqueda de un árbol es el logaritmo de N base 2, por lo que la complejidad temporal de buscar una fila en la tabla impulsada es 2*
Cada fila de datos en la tabla de control debe buscarse en la tabla de control una vez, y la complejidad aproximada de todo el proceso de ejecución es M + M ∗ 2 ∗ log 2 NM + M*2*log2^NMETRO+METRO∗2∗log 2 _ _norte
Obviamente, M tiene un mayor impacto en el número de filas escaneadas, por lo que se debe usar una tabla pequeña como tabla de control. Por supuesto, la premisa de esta conclusión es que el índice de la tabla impulsada se puede utilizar
En el resultado de la explicación, ¿aparece la palabra "Bloquear bucle anidado" en el campo adicional?
Mesita como mesa de conducción
Aumentar el tamaño de join_buffer_size
Blog de referencia
[1]