Creación de consultas SQL dinámicas
Frecuentes
Visto 90 equipos
0
1) Estoy haciendo una aplicación en la que estoy mostrando una tabla resumen. Al hacer clic en cada columna de resumen, puedo ordenar de manera ascendente o descendente. por ejemplo, hay 5 columnas
2) Entonces, en una instancia normal, crearé un mínimo de 5 consultas SQL individuales para proporcionar esta funcionalidad. Esto se puede crear como declaración preparada.
3) Pero, ¿es una buena práctica crear un código sql único dinámico que pueda tener en cuenta todas las condiciones y todo el orden como lo he hecho a continuación? ¿Cómo afectará el rendimiento de la base de datos? Dado que ahora no puedo escribir nada como declaración preparada, ¿mi ejecución será lenta?
Por favor sugiera Gracias
CREATE DEFINER=`root`@`localhost` PROCEDIMIENTO `lSummary`(en fixedConditionList VARCHAR(1000), en OptionalConditionListForBackEnd VARCHAR(1000),en orderByColumnList VARCHAR(1000),en OpcionalJoinStatement VARCHAR(1000),en startLimit int(10), en OptionalFilterListWithAnd VARCHAR(1000),en OptionalFilterListWithOr VARCHAR(1000),en selectColumnList VARCHAR(10000),en EndLimit int(10)) BEGIN DECLARE SQLStatement varchar(5000); SET @SQLStatement = CONCAT("select l.lCaseId,concat('Staf') as canWrite,concat('Staf') as canShare,DATE_FORMAT(c.nextCourtDate,'%d-%m-%Y') as nextCourtDate, TIME_FORMAT( c.nextTime,'%h:%i %p' ) as nextTime,totalNumberOfSSSteps,totalNumberOfSteps, ",selectColumnList," from litigation l left join(select relatedToId,relatedToPrefix,count (*) as totalNumberOfSteps from flowsubmilestoneinuse group byrelatedToId ) como wt en l.lCaseId=wt.relatedToId y l.lCasePrefix=wt.relatedToPrefix combinación izquierda (seleccione relatedToId,relatedToPrefix,count (*) as totalNumberOfSSsteps from flowsubmilestoneinuse where hitleReachedById is not null group byrelatedToId ) as wc on l.lCaseId =wc.relatedToId and l.lCasePrefix=wc.relatedToPrefix dejó el detalle de la unión c en c.lCaseId= l.lCaseId ",instrucción de unión opcional," donde ("Lista de condiciones fijas") AND ("Lista de condiciones opcionales para el extremo posterior") AND ("Lista de filtros opcional con Y ,") AND ("OptionalFilterListWithOr,") ordenar por ",orderByColumnList," Limit ",startLimit,EndLimit); EJECUTAR STMT; FIN
1 Respuestas
0
Con respecto al rendimiento de la base de datos: en general, sí, la consulta dinámica afecta el rendimiento. Bajo el capó, el motor de SQL Server crea un plan de ejecución de consultas, incluso para consultas dinámicas. En esta situación, debe probar y evaluar el rendimiento. Además, puede analizar el plan de ejecución y tal vez mejorarlo.
Puedo ver que eres bastante bueno con T-SQL, pero tengo la impresión de que estás usando una herramienta incorrecta para esto. Claro, SQL Server puede hacer frente a este tipo de tarea, pero mi consejo es: deje que el lado del cliente se ocupe de la clasificación mientras usa SQL Server para su función principal: obtener los datos.
Piense en esto: una vez que tiene su conjunto de datos en la memoria, es mucho más rápido ordenar en memoria que enviar una nueva solicitud al servidor. ¿Bien?
Por supuesto, depende de la tecnología del cliente que esté utilizando. Por ejemplo, si está utilizando un cliente basado en web, hay muchos productos basados en jQuery que pueden hacerlo por usted (consulte www.jtable.org, por ejemplo). Además, para .NET hay muchos controles de tabla que son fáciles de usar y están optimizados para ordenar.
Respondido 12 Feb 14, 13:02
Gracias Kenan. Estudiaré tus sugerencias - Lajpat
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql database or haz tu propia pregunta.
Ciertamente, una declaración preparada puede aceptar un parámetro dinámico en tiempo de ejecución. Eso no es problema. - arkascha
Hola, ¿puedes guiarme con alguna referencia a los tutoriales si es posible? Gracias - Lajpat