2008-10-28 51 views
29

Encontré a posting on the MySQL forums from 2005, pero nada más reciente que eso. Basado en eso, no es posible. Pero muchas cosas pueden cambiar en 3-4 años.¿Es posible tener una vista indexada en MySQL?

Lo que estoy buscando es una forma de tener un índice sobre una vista pero hacer que la tabla que se visualiza permanezca sin indexar. La indexación perjudica el proceso de escritura y esta tabla se escribe con bastante frecuencia (hasta el punto en que la indexación ralentiza todo a un rastreo). Sin embargo, esta falta de índice hace que mis consultas sean muy lentas.

+0

Ver http://stackoverflow.com/q/7922675/632951 – Pacerier

Respuesta

28

No creo que MySQL admita vistas materializadas, que es lo que necesitaría, pero de todos modos no le ayudaría en esta situación. Si el índice está en la vista o en la tabla subyacente, debería escribirse y actualizarse en algún momento durante una actualización de la tabla subyacente, por lo que aún causaría problemas de velocidad de escritura.

Su mejor opción probablemente sea crear tablas de resumen que se actualicen periódicamente.

+1

Gracias. Hice un poco más de búsqueda en vistas materializadas, y parece que estás en lo cierto. –

7

¿Ha considerado abstraer sus datos de procesamiento de transacciones de sus datos de procesamiento analítico para que ambos puedan ser especializados para cumplir con sus requisitos únicos?

La idea básica es que tiene una versión de los datos que se modifica regularmente, esta sería la parte de procesamiento de transacciones y requiere una pesada normalización e índices ligeros para que las operaciones de escritura sean rápidas. Una segunda versión de los datos está estructurada para el procesamiento analítico y tiende a ser menos normalizada y más indexada para las operaciones de informes rápidos.

Los datos estructurados en torno al procesamiento analítico generalmente se basan en la metodología del cubo de almacenamiento de datos, y están compuestos por tablas de hechos que representan los lados del cubo y las tablas de dimensiones que representan los bordes del cubo.

+0

Eso es en realidad en lo que estoy trabajando ahora. Creo. Voy a tener una tabla que tenga los datos que necesito que se actualicen de forma periódica e indexados para las consultas, por lo que solo tengo que consultar la tabla no indexada una vez cada [unidad de tiempo larga] para actualizar la tabla indexada con nuevos datos. –

0

¿Solo desea una vista indexada? Es poco probable que escribir en una tabla con un solo índice sea tan perturbador. ¿No hay una clave principal?

Si cada registro es grande, puede mejorar el rendimiento al descubrir cómo acortarlo. O acorte la longitud del índice que necesita.

Si se trata de una tabla de solo escritura (es decir, no necesita hacer actualizaciones), puede ser mortal en MySQL para comenzar a archivarla o eliminar registros (y claves de índice) que requieren que el índice comience. llenar (reutilizar) las ranuras de las claves eliminadas, en lugar de simplemente agregar nuevos valores de índice. Contra-intuitivo, pero es mejor que tengas una mesa más grande en este caso.

2

Flexviews admite vistas materializadas en MySQL mediante el seguimiento de los cambios en las tablas subyacentes y la actualización de la tabla que funciona como una vista materializada. Este enfoque significa que SQL soportado por la vista es un poco restringido (como las rutinas de registro de cambios tienen que descubrir qué tablas debe rastrear para los cambios), pero hasta donde yo sé, esto es lo más cercano que se puede obtener a vistas materializadas en MySQL .

Cuestiones relacionadas