sql >> Base de Datos >  >> RDS >> Mysql

¿Qué es la selección Big-O para SQL?

Como no controlas el algoritmo seleccionado, no hay forma de saberlo directamente. Sin embargo, sin índices, un SELECT debe ser O(n) (un escaneo de tabla debe inspeccionar cada registro, lo que significa que se escalará con el tamaño de la tabla).

Con un índice, una SELECCIÓN es probablemente O(log(n)) (aunque dependería del algoritmo utilizado para la indexación y las propiedades de los datos en sí, si eso es cierto para cualquier tabla real). Para determinar sus resultados para cualquier tabla o consulta, debe recurrir a la creación de perfiles de datos del mundo real para estar seguro.

INSERTAR sin índices debería ser muy rápido (cerca de O(1)) mientras que ACTUALIZAR necesita encontrar los registros primero y, por lo tanto, será más lento (ligeramente) que SELECCIONAR que lo lleva allí.

INSERTAR con índices probablemente volverá a estar en el estadio de béisbol de O(log(n^2)) cuando el árbol de índices necesite ser reequilibrado, más cerca de O(log(n)) de lo contrario. La misma desaceleración ocurrirá con una ACTUALIZACIÓN si afecta las filas indexadas, además de los costos de SELECT.

Todas las apuestas están canceladas una vez que esté hablando de JOIN en la mezcla:tendrá que perfilar y usar las herramientas de estimación de consultas de sus bases de datos para obtener una lectura. También tenga en cuenta que si esta consulta es crítica para el rendimiento, debe re perfil de vez en cuando, ya que los algoritmos utilizados por su optimizador de consultas cambiarán a medida que cambie la carga de datos.

Otra cosa a tener en cuenta... big-O no te informa sobre los costos fijos de cada transacción. Para mesas más pequeñas, estos son probablemente más altos que los costos de trabajo reales. Como ejemplo:los costos de configuración, desmontaje y comunicación de una consulta entre redes para una sola fila seguramente serán mayores que la búsqueda de un registro indexado en una tabla pequeña.

Debido a esto, descubrí que poder agrupar un grupo de consultas relacionadas en un lote puede tener un impacto mucho mayor en el rendimiento que cualquier optimización que hice en la base de datos propiamente dicha.