![]() |
Como optimizar sql
buenas tardes:
como puedo optimizar esta consulta. se tarda muchisimo ya que ocupo demaciados registros.
|
Que exactamente es
Cita:
|
Cita:
Doctor, ¿qué puedo hacer para que a mi hijo no le duela? Ahora, imagina qué te contestará el doctor. Pues lo mismo. |
Gracias por sus tips para plantear el tema:
resulta que tengo una tablaDB similar a esta: Dato1 dato2 dato3 dato4 1 59 dsfg sdfg 2 60 sdfg sdfg 3 61 dsfg sdfg 4 62 dsfg sdfg 8 66 sdfg sdfg 9 67 dsfg sdfg 10 68 dsfg sdfg 11 69 sdfg sdfg y obtengo el registro de en medio: Dato1 dato2 dato3 dato4 " " 64 dsfg sdfg sin el Dato1. normalmente lo que haría alguien normal es recorrer tupla por tupla, pero yo en lugar de eso, uso el dato2, y busco el máximo menor en la BD, ademas, busco el máximo de dato1. de este modo, obtengo los datos: Dato1 dato2 4 62 después le resto el dato2 actual con el dato2 de la BD y obtengo la cantidad de espacios entre ellos, así pues, uso el dato1 de la BD y le sumo el resultado de la resta, para obtener el numero 6 que debo insertar en la BD con los datos completos. asi mi registro completo queda de la siguiente manera: Dato1 dato2 dato3 dato4 6 64 dsfg sdfg y mi tabla queda un poco mas completa: Dato1 dato2 dato3 dato4 1 59 dsfg sdfg 2 60 sdfg sdfg 3 61 dsfg sdfg 4 62 dsfg sdfg 6 64 dsfg sdfg 8 66 sdfg sdfg 9 67 dsfg sdfg 10 68 dsfg sdfg 11 69 sdfg sdfg lo que quiero es optimizar la consulta, ya que tengo mas de 600 mil registros, y se tarda un poco esta consulta. una disculpa por no colocar todo en tabla. |
No lo entiendo.
De dónde sacas esto, si no existe: " " 64 dsfg sdfg |
Hola.
Cita:
¿ Y no te arroja ningún error así como está ? Saludos :) |
Cita:
|
Cita:
no, no genera error, actualmente esta funcionando: mira este es el código tal cual:
|
Cita:
|
Cita:
De entrada, un subselect como el que me imagino tienes en la segunda línea SI ESTÁ PERFECTAMENTE PARAMETRIZADO no tarda mucho. No es lo mismo seleccionar una pelirroja con vestido blanco en una calle de Edimburgo que una pelirroja con vestido... (Perdón por el ejemplo) |
Este pedazo del código sería terrible (por lo menos en mysql)
MAX es genial en ciertos casos, porque el manejador de bb dd simplemente busca el ultimo registro del indice para esa columna, ni siquiera baja a disco (los indices están en ram), pero en el WHERE refieres al mismo campo (CAMPO 2) por lo que hay que recorrer el indice Mi sugerencia es que pruebes un indice campo2, campo3, campo4 (siempre campo2 primero) y mides si ese subquery mejora Yo de hecho cambiaría un poco la consulta (cosas de MySQL) Código:
SELECT campo2
Esto si es un dolor de cabeza, siempre termina por crear una tabla temporal y luego ordenarla. No importa lo que mejores el subquery (por cierto no entiendo la función del subquery) Lo seguiré pensando, pero realmente no veo forma de optimizar ese query. |
La franja horaria es GMT +2. Ahora son las 18:10:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi