¿Por qué seleccionó la prohibición de Alibaba? *
El Manual de desarrollo de Alibaba estipula:
Es obligatorio no utilizar * como lista de campos en las consultas de tablas, y los campos obligatorios deben estar escritos claramente
Nota:
Primero, introduzcamos la arquitectura básica de MySQL. La estructura básica se muestra en la siguiente figura:
La arquitectura básica de MySQL se puede dividir en dos partes: capa del servidor y la capa del motor de almacenamiento. La capa del servidor incluye conectores, cachés de consultas, analizadores, optimizadores, ejecutores, etc. La capa del motor de almacenamiento es responsable de almacenar y recuperar datos. Su modelo arquitectónico es un complemento y admite múltiples motores de almacenamiento como InnoDB, MyISAM y Memory.
Cuando ejecutamos la declaración de consulta: seleccione * de t. donde id = 1, el proceso de ejecución de MySQL es el siguiente:
Supongamos que hay una declaración SQL como la siguiente select * from t donde nombre = "Sweet He", donde id es la clave principal y el nombre es el índice, de hecho, el propósito de escribir esta declaración es solo para consultar la identificación de un nombre específico.
En el motor de almacenamiento innodb, los índices se pueden dividir en índices de clave no primaria y clave primaria. índices. La diferencia entre los índices de clave primaria y las claves primarias radica en la forma en que los nodos hoja almacenan datos. Los nodos hoja en el índice de clave principal almacenan la fila completa de datos, mientras que los nodos hoja en el índice de clave no principal almacenan el valor de la clave principal. Ahora veamos cómo se ejecuta la instrucción select * from t donde nombre = "Sweet He"
Debido a que nombre es un índice y nombre es una condición de consulta, el optimizador de consultas elige usar el índice de nombres. Primero, la consulta encuentra que la identificación de la clave principal correspondiente al nombre es 1. Dado que se consultan todos los datos del nombre especificado, también es necesario realizar una operación de retorno de tabla basada en la identificación de la clave principal. La llamada operación de retorno de tabla significa que después de consultar la identificación de la clave principal en el índice de clave no principal, todos los datos se consultan desde el índice de clave principal de acuerdo con la identificación de la clave principal. El proceso específico se puede ver en la siguiente figura. /p>
Como se mencionó anteriormente, solo Para el campo id, si la declaración SQL original se modifica para seleccionar id de t donde nombre = "He sweet sweet", se puede evitar la operación de retorno de la tabla. El requisito de consulta se ha cubierto en el índice de clave no principal, es decir, el ID de la consulta requerida ya está en el índice de clave no principal, también conocido como índice de cobertura*. Al cubrir el índice, puede reducir la cantidad de veces que regresa a la tabla, lo que mejora significativamente el rendimiento de las consultas. Por lo tanto, en el proceso de escritura SQL real, debe intentar evitar escribir declaraciones de consulta select *. Antes de escribir, debe preguntar si realmente necesita usar tantos campos.
BLOB y TEXT son tipos de datos de cadena. diseñado para usarse para almacenar cantidades muy grandes de datos, cuando el valor de BLOB o TEXT es demasiado grande, InnoDB no podrá usar los datos para realizar consultas. Cuando el valor es demasiado grande, InnoDB utilizará un área de almacenamiento externo especial para el almacenamiento. Cada valor en la fila requiere de 1 a 4 bytes para almacenar un puntero y luego almacena el valor real en el área de almacenamiento externo Si la consulta * Si. hay campos de tipo BLOB o TEXTO, se requieren operaciones IO adicionales para consultar la columna BLOB o TEXTO para ir al área de almacenamiento externo para consultarla, así que trate de evitar usar select * para almacenar datos. Por lo tanto, trate de evitar el uso de select *
para transmitir demasiados datos, lo que aumentará la sobrecarga de la red. Al mismo tiempo, al ejecutar una declaración de consulta, los datos de la consulta primero se colocarán en el caché de consultas y luego los resultados se devolverán al cliente desde el caché de consultas.
Si los datos de la consulta son muy grandes, almacenar los resultados llevará mucho tiempo, por lo que lo que quiero decir es que debemos evitar el uso de select *
Al desarrollar este tipo de declaraciones SQL, deberíamos intentarlo. para evitar el uso de select * , aunque esto generalmente no es posible. Incluso si realmente escribe una declaración SQL como select *, el impacto en el proyecto puede no ser tan grande, pero aún es necesario desarrollar buenos hábitos
Sigo pensando que el artículo anterior también es muy bueno, Usuario Módulo de Gestión: Cómo garantizar la seguridad de los datos del usuario, o seguir promocionándolos, simplemente dale me gusta y vete