Tengo dos tablas: A - 301 columnas (primera llamada a1 int (11) Clave principal, 2da a 301ª - doble (15,11)) & B - 33 columnas (1st one - b1 int (11) Clave única, 2nd One - b2 varchar (100) Clave principal, ..., 33.a - b33 int (11) MUL).Selección de Mysql en la desaceleración de la columna indexada en tablas grandes
Ambos A & B tienen ~ 13,500,000 registros.
Mi consulta MySQL: Para cada valor de punto de venta, con el POS en el conjunto (1, 1000, 2000, ..., 13500000) en múltiplos de 1000:
seleccione A. *, B2, B5 , b7, b8, b10, b13, b33 de A unión B en a1 = b1 donde b33> = pos y b33 < pos + 1000;
La consulta tarda 1-5 segundos para los valores de b33 < = 600,000. Después de eso, la consulta comienza a tomar de 20 a 30 segundos. Cuando b33> = 8,000,000 la consulta comienza a tomar 60-70s. No puedo entender por qué está ocurriendo la desaceleración. b33 está indexado y la unión tiene lugar en la clave que se define como primaria en una tabla y única en la otra. ¿Hay una solución para esto? Esto realmente está obstaculizando la velocidad del código y tendré que dividir las tablas A & B en varias más pequeñas si nada funciona. ¡Realmente espero no tener que hacer eso! ¡Por favor ayuda!
EDIT: Aquí está la O/P de EXPLIQUE -
** * ** * ** * ** * * 1. fila * ** * ** * ** * ** *
id: 1
SELECT_TYPE: SIMPLE
tabla: B
tipo: gama
possible_keys: B1, B33
clave: b33
key_len: 4
ref: NULL
filas: 981
Extra: Usando donde
* ** * ** * ** * ** * 2.fila * ** * ** * ** * ** *
id: 1
SELECT_TYPE: SIMPLE
tabla: A
tipo: eq_ref
possible_keys: PRIMARIO
clave: PRIMARIO
key_len: 4
ref: DBName.B.b1
filas: 1
adicionales:
2 rows in set (0.00 sec)
¿Tiene un valor particular> 600,000 para el cual el rendimiento cae repentinamente de ~ 5s a ~ 20s? –
No. Tengo más como un rango. Publicar 650,000 es una pesadilla. – ayesha129
Esa es la salida de la explicación de la lenta, supongo. Y el rápido? Tiene la misma salida? – Samuel