Restricciones
Actualmente, hay algunas restricciones en las consultas paralelas, pero se resolverán gradualmente en el futuro.
Sentencias no admitidas
Las consultas paralelas no son adecuadas para:
- Sentencias Non-SELECT
- Funciones de ventana
- Activadores
- Prepared Statements
- Índices espaciales
- Tablas de sistema, tablas temporales y tablas no InnoDB
- Índices de texto completo
- Procedimientos almacenados
- Subconsultas que no se pueden convertir en semijoin
- Sentencias SQL que no cumplen las reglas only_full_group_by
- Sentencia Index Merge
- Consultas de bloqueo, como nivel de aislamiento de SERIALIZABLE, FOR UPDATE, o SHARE LOCK
- Consultas recursivas
- With rollup
- Sentencias con la palabra clave HIGH_PRIORITY
- No se devuelve ninguna línea de datos en el resultado de la ejecución. (El plan de ejecución muestra: Zero limit, Impossible WHERE, Impossible HAVING, No matching min/max row, Select tables optimized away, Impossible HAVING noticed after reading const tables, o no matching row in const table)
- Columnas con tipo ZEROFILL. Sus valores de columna se pueden optimizar a constantes.
- Generated columns, BLOB, TEXT, JSON, y GEOMETRY
- Funciones de Spatial (como SP_WITHIN_FUNC)
- Cláusulas DISTINCT en funciones Aggregate, como SUM (DISTINCT), AVG (DISTINCT), y COUNT(DISTINCT)
- GROUP_CONCAT
- JSON_ARRAYAGG/JSON_OBJECTAGG
- Funciones definidas por el usuario
- STD/STDDEV/STDDEV_POP
- VARIANCE/VAR_POP/VAR_SAMP
- BIT_AND, BIT_OR and BIT_XOR
- set_user_var
- Funciones RAND con parámetros
- json_* (como json_length y json_type)
- st_distance
- get_lock
- is_free_lock, is_used_lock, release_lock, and release_all_locks
- sleep
- xml_str
- weight_string
- REF functions (VIEW_REF, OUTER_REF, AGGREGATE_REF)
- SHA, SHA1, SHA2, and MD5
- row_count
- round
- Funciones relacionadas con el usuario (como user, current_user, session_user, system_user)
Incompatible con los resultados de ejecución en serie
Los resultados de ejecución de las consultas paralelas pueden ser incompatibles con los de las consultas en serie.
- Número de errores o alarmas
Si se muestra un mensaje de error o alarma durante las consultas en serie, el mensaje de error o alarma se mostrará en cada subproceso de trabajo durante las consultas en paralelo. Como resultado, aumenta el número total de mensajes de error o alarma.
- Precisión
Durante las consultas paralelas, si hay un tipo de función en una sentencia SELECT, se generarán procedimientos almacenados adicionales en los resultados intermedios. Como resultado, en comparación con las consultas en serie, la precisión de la parte de coma flotante en consultas paralelas puede ser diferente, y el resultado final puede ser ligeramente diferente.
- Truncamiento
Durante las consultas paralelas, si hay un tipo de función en una sentencia SELECT, se generarán procedimientos almacenados adicionales en los resultados intermedios. En este proceso, el resultado del cálculo de la función necesita ser almacenado en caché, y el truncamiento de datos puede ocurrir (generalmente debido a la conversión de tipo de datos, por ejemplo, que cubre un valor de coma flotante a una cadena de caracteres). Como resultado, el resultado final es diferente de las consultas en serie.
- Secuencia de conjuntos de resultados
Debido a que las tareas son ejecutadas por varios subprocesos de trabajo durante consultas paralelas, la secuencia del conjunto de resultados devuelto puede no ser coherente con la de las consultas en serie. En el caso de una consulta con LIMIT, es más probable que se produzca este problema. Si los campos de GROUP BY son caracteres invisibles, la secuencia del conjunto de resultados devuelto también es diferente.
- Conjuntos de resultado de UNION ALL
UNION ALL ignora los operadores de ordenación. La secuencia del conjunto de resultados devuelto en ejecución paralela puede ser diferente de la de la ejecución no paralela. En el caso de una consulta con LIMIT, los conjuntos de resultados son diferentes.