Pregunta

¿Se puede obtener una lista de técnicas de optimización básica que van (cualquier cosa, desde el modelado de consulta, creación de índices, vistas a la optimización de consultas). Sería bueno tener una lista de estos, una técnica por respuesta. Como aficionado me parece que esto es muy útil, gracias.

Y por el bien de no ser demasiado vagos, digamos que estamos utilizando un maintstream DB como MySQL u Oracle, y que la base de datos contendrá 500,000-1m más o menos registros a través de ~ 10 mesas, algunas de ellas con contraints clave externa, todas ellas con las mayoría de los motores de almacenamiento típicas (por ejemplo: InnoDB para MySQL). Y, por supuesto, los conceptos básicos tales como PK se definen, así como contraints FK.

¿Fue útil?

Solución

.

Obtener información acerca de los índices, y utilizarlos de manera adecuada * En términos generales, siga estas indicaciones:

  • Cada tabla debe tener un índice agrupado
  • Los campos que utiliza para los filtros y ordenaciones son buenos candidatos para la indexación
  • más selectivo campos son mejores candidatos para la indexación
  • Para un mejor rendimiento en las consultas cruciales, de diseño "que cubre índices" para aquellas consultas
  • Asegúrese de que se están utilizando realmente sus índices, y eliminar los que no son
  • Si la tabla tiene 15 campos, y usted hace 15 índices, cada uno con un solo campo, se está haciendo mal:)

* Hay algunas excepciones a estas reglas si usted sabe lo que está haciendo. Mi experiencia es Microsoft SQL Server, pero yo presumiría la mayor parte de este consejo porque seguiría siendo aplicable a un RDBMS diferentes.

Otros consejos

OMI, con mucho, la mejor optimización es que el modelo de datos encaja en el dominio del problema para el que fue construido. Cuando no lo hace, el síntoma resultante es difícil de escribir o consultas contorneados con el fin de obtener la información deseada y que por lo general se alza a sí mismo cuando se construyen los informes en contra de la base de datos. Por lo tanto, en el diseño de una base de datos que ayuda a tener una idea de los tipos y naturaleza de la información, tales como informes, que los usuarios desearán del sistema.

Cuando se habla de diseño de base de datos, echa un vistazo a la normalización de bases de datos, por ejemplo, el artículo de wikipedia:. Formas normales

Si usted tiene un buen diseño y todavía lo necesario para optimizar el rendimiento, prueba a Desnormalización .

Si usted tiene necesidades específicas que no están cubiertos por el modelo relacional de manera eficiente, vistazo a otros modelos cubiertos por el término NoSQL .

Algunas de consulta / optimizaciones de esquema:

  • Sé consciente cuando se utiliza DISTINCT o GROUP BY. Me parece que muchos de los nuevos desarrolladores podrán utilizar DISTINCT en lugares donde realmente no lo necesite o se podría reescribir de manera más eficiente el uso de una declaración o una consulta derivada existe.

  • Sea consciente de la izquierda se une. Con demasiada frecuencia aparecen nuevos desarrolladores de SQL ignorarán el esquema y aumenta el uso izquierda se une a donde realmente no son necesarios. Por ejemplo:

Select
From Orders
    Left Join Customers
        On Customers.Id = Orders.CustomerId

Si Orders.CustomerID es una columna requerida, entonces no es necesario el uso de una combinación izquierda.

  • Sea un estudiante de nuevas características. Actualmente, MySQL no soporta expresiones de tabla común que significa que algunos tipos de consultas son incómodos y probablemente más lento para escribir de lo que serían si CTE fueron apoyados. Sin embargo, eso no va a ser verdad para siempre. Mantenerse al día sobre las nuevas características de sintaxis en MySQL, que podrían ser utilizados para realizar consultas existentes de manera más eficiente.

  • Usted no tiene que utilizar claves delegadas todas partes. Es posible que haya mesas más adecuado para una llave inteligente (por ejemplo abreviaturas de los estados de Estados Unidos, códigos de monedas, etc), lo que permitirá a los desarrolladores para evitar une adicional en muchos casos.

  • Si es posible, encontrar la manera de archivar los datos a un servidor OLAP o informes. El más pequeño puede hacer que los datos de producción, más rápido se va a ejecutar.

Un diseño que los modelos de manera concisa el problema es siempre un comienzo bueno. Generalizar el modelo de datos puede conducir a problemas de rendimiento. Por ejemplo, he oído informes de proyectos que luchan por la súper-flexibilidad que utilizan los RDBMS como un tonto tienda "nombre / valor" - y el rendimiento resultante era pésimo

.

Una vez que un buen diseño está en su lugar, a continuación, utilizar las herramientas proporcionadas por el RDBMS para ayudar a lograr un buen rendimiento. PKs de campo único (no hay composites), pero teclas de negocios compuestos como un índice con restricción única, el uso de tipos de datos apropiados, por ejemplo, usando tipos numéricos apropiados para los valores numéricos en lugar de carbón o similar. atributos físicos del hardware del RDBMS se ejecuta en también debe ser considerado, ya que la mayor parte de tiempo de consulta es a menudo / S de disco - pero por supuesto no toman esto por sentado - utilizan un generador de perfiles para averiguar dónde va el tiempo .

Dependiendo de la proporción de actualización / consulta, vistas materializadas / vistas indizadas pueden ser útiles en la mejora de rendimiento de las consultas que se ejecutan lentamente. Una alternativa hombre pobre es utilizar disparadores para invocar un procedimiento que rellena la tabla con el resultado de una visión de baja velocidad, rara vez cambian.

La optimización de consultas es un poco de un arte negro, ya que es a menudo la base de datos dependiente, pero se dan algunas reglas de oro aquí - Optimización de SQL .

Por último, aunque posiblemente fuera del alcance previsto de su pregunta, utilice una capa de acceso de datos bien en su aplicación, y evitar la tentación de rodar su propia - seguramente hay probadas y puestas en práctica performant disponible para todos los idiomas. El uso de la memoria caché en la capa de acceso a datos, nivel medio y nivel de aplicación pueden ayudar a mejorar el rendimiento considerablemente.

El uso Do menos consulta siempre que sea posible. Uso "JOIN", y el grupo de las tablas de modo que una sola consulta le da a sus resultados.

Un ejemplo bueno es el Modificado Preordenes árbol transversal ( MPTT ) para obtener todos los padres un nodo del árbol, ordenó, en una sola consulta.

Tome un enfoque holístico para la optimización.

Tenga en cuenta el impacto de los discos lentos, la latencia de red, falta de memoria, y la carga del servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top