Tengo una tarea para una empresa que básicamente consiste en extraer datos de una base de datos (Microsoft SQL Server 2008). En el proceso, los usuarios podrán elegir qué columnas seleccionar, elegir desde qué vista seleccionar y crear la cláusula WHERE. En función de lo que el usuario elija, la consulta SQL se construye en consecuencia. Un requisito es que el usuario pueda seleccionar CUALQUIER columna de CUALQUIER vista y filtrar por CUALQUIER columna en la cláusula WHERE. La compañía no quiere que la solución use data warehouse/OLAP, y quiere limitar cualquier software de terceros. Básicamente, solo quieren una aplicación .NET Windows Forms que construya dinámicamente consultas SQL basadas en una GUI y se conecte a una base de datos.Optimización de consultas dinámicas
Mi preocupación aquí es cómo optimizar las consultas. De ninguna manera soy bueno optimizando las consultas SQL, pero mi primer pensamiento fue: ¿qué sucede si el usuario elige filtrar por una columna que no tiene índice (en la cláusula WHERE)? Al darle tanta flexibilidad al usuario, es posible que genere consultas que son tan ineficaces que llevará mucho tiempo en ejecutarse.
Me doy cuenta de que el rendimiento nunca puede ser bueno con una gran cantidad de datos si se filtran en columnas que no tienen índices, pero ¿hay algo que pueda hacer para mejorarlo? Por supuesto, no puedo simplemente agregar índices a todas las columnas.
No solo estoy buscando la optimización de consultas, ¿pero también estoy pensando si hay algún ajuste de servidor que pueda hacer, como el almacenamiento en caché? Básicamente, soy todo oídos y busco cualquier consejo que pueda ayudarme a mejorar el rendimiento.
¿Alguna sugerencia?
¡Gracias de antemano!
Este es uno de los escenarios para los que se supone que los índices de la tienda de columnas ayudan (¡no disponible hasta la próxima versión!). No estoy seguro de lo que quiere decir con no usar un DW. ¿Está esto consultando una base de datos OLTP que también está sujeta a modificaciones concurrentes de datos, por lo tanto, la renuencia a agregar índices? –
Sí, la base de datos será una base de datos OLTP que se usa para muchas otras cosas. Por lo tanto, agregar muchos índices ralentizaría mucho las inserciones/actualizaciones, creo. – Andy0708
Duda que hay mucho que puede hacer basado en esa especificación (aparte de las obvias actualizaciones de hardware). El rendimiento probablemente apestará. ¿Por qué han descontado OLAP/DW por esto? –