Comprenda sus requisitos antes de diseñar el esquema (si es posible).
Conozca los datos, 1) indexación 2) tipo de almacenamiento utilizado, 3) motor o características del proveedor; es decir ... almacenamiento en caché, capacidades en memoria 4) tipos de datos 5) tamaño de la tabla 6) frecuencia de consulta 7) cargas de trabajo relacionadas si el recurso se comparte 8) Prueba
A) Los requisitos variarán. Si el hardware no puede soportar la carga de trabajo esperada, debe reevaluar cómo proporcionar los requisitos en la carga de trabajo. En cuanto a la columna de adición a la tabla. Si la base de datos admite vistas, puede crear una vista indizada (?) De los datos específicos con las columnas con nombre específicas (en lugar de seleccionar '*'). Revise periódicamente sus datos y su esquema para asegurarse de que nunca se encuentre con el síndrome "Basura de entrada" -> "Basura de salida".
Asumiendo que no hay otra solución; Puede tener en cuenta lo siguiente. Siempre hay múltiples soluciones a un problema.
1) Indexación: el select * ejecutará un escaneo de tabla. Dependiendo de varios factores, esto puede implicar una búsqueda de disco y / o contención con otras consultas. Si la tabla es multipropósito, asegúrese de que todas las consultas sean efectivas y se ejecuten por debajo de los tiempos objetivo. Si hay una gran cantidad de datos y su red u otro recurso no está sintonizado; necesitas tener esto en cuenta. La base de datos es un entorno compartido.
2) tipo de almacenamiento. Es decir: si está utilizando SSD, disco o memoria. Los tiempos de E / S y la carga en el sistema / CPU variarán.
3) ¿Puede el DBA ajustar la base de datos / tablas para un mayor rendimiento? Suponiendo por cualquier razón, los equipos han decidido que seleccionar '*' es la mejor solución al problema; ¿Se puede cargar el DB o la tabla en la memoria? (U otro método ... ¿tal vez la respuesta fue diseñada para responder con un retraso de 2-3 segundos? --- mientras se reproduce un anuncio para obtener los ingresos de la empresa ...)
4) Comience en la línea de base. Comprenda sus tipos de datos y cómo se presentarán los resultados. Tipos de datos más pequeños, el número de campos reduce la cantidad de datos devueltos en el conjunto de resultados. Esto deja recursos disponibles para otras necesidades del sistema. Los recursos del sistema generalmente tienen un límite; 'siempre' trabaja por debajo de estos límites para garantizar la estabilidad y un comportamiento predecible.
5) tamaño de la tabla / datos. seleccione '*' es común con tablas pequeñas. Normalmente encajan en la memoria, y los tiempos de respuesta son rápidos. De nuevo ... revise sus requisitos. Plan para el arrastre de características; siempre planifique para las necesidades actuales y futuras posibles.
6) Frecuencia de consulta / consultas. Tenga en cuenta otras cargas de trabajo en el sistema. Si esta consulta se dispara cada segundo, y la tabla es pequeña. El conjunto de resultados puede diseñarse para permanecer en caché / memoria. Sin embargo, si la consulta es un proceso por lotes frecuente con Gigabytes / Terabytes de datos ... es mejor que dedique recursos adicionales para garantizar que otras cargas de trabajo no se vean afectadas.
7) Cargas de trabajo relacionadas. Comprenda cómo se utilizan los recursos. ¿La red / sistema / base de datos / tabla / aplicación está dedicada o compartida? ¿Quiénes son los interesados? ¿Es esto para producción, desarrollo o control de calidad? ¿Es esta una "solución rápida" temporal? ¿Has probado el escenario? Te sorprenderá cuántos problemas pueden existir en el hardware actual hoy. (Sí, el rendimiento es rápido ... pero el diseño / rendimiento todavía está degradado). ¿Necesita el sistema realizar 10K consultas por segundo frente a 5-10 consultas por segundo? ¿El servidor de la base de datos está dedicado, o realiza otras aplicaciones? Algunas aplicaciones / idiomas; Las O / S consumirán el 100% de la memoria causando diversos síntomas / problemas.
8) Prueba: Pon a prueba tus teorías y comprende todo lo que puedas al respecto. Su problema de selección '*' puede ser un gran problema, o puede ser algo de lo que ni siquiera necesita preocuparse.
SELECT COUNT(*)
ser malo es increíblemente viejo y anticuado . Para obtener información sobreSELECT *
: consulte: stackoverflow.com/questions/1960036/…