optimizar una consulta

11/03/2009 - 13:16 por Angel | Informe spam
Hola a todos. Tengo una bbdd montada en sql 2000 con ultimo sp y fix.
Estoy corriendo una serie de consultas que me gustaria saber si se pueden
optimizar. Son las siguientes:


Buscamos el usuario del que sabemos su id, email o telefono

select * from usuarios where ((".strlen($id).">0 and
usuarios.id='".sql_quote($id)."') or (".strlen($email).">0 and
usuarios.email='".sql_quote($email)."') or (".strlen($telf).">0 and
(usuarios.telefono1='".sql_quote($telf)."' or
usuarios.telefono2='".sql_quote($telf)."')))


Si existe, mantenemos los datos en $row_user y buscamos todos los usuarios
que tienen algún dato de contacto en común con él

select * from usuarios where 1=2 or (".strlen($row_user["email"]).">0 and
usuarios.email='".sql_quote($row_user["email"])."') or
(".strlen($row_user["telefono1"]).">0 and
(usuarios.telefono1='".sql_quote($row_user["telefono1"])."' or
usuarios.telefono2='".sql_quote($row_user["telefono1"])."')) or
(".strlen($row_user["telefono2"]).">0 and
(usuarios.telefono1='".sql_quote($row_user["telefono2"])."' or
usuarios.telefono2='".sql_quote($row_user["telefono2"])."'))


Guardamos todos los usuarios resultantes en una variable y buscamos todos
los proyectos cuyo campo usuario_id está contenido en esa variable

select distinct proyectos.id as proyectos_id, proyectos.titulo as titulo,
proyectos.cuerpo as cuerpo, proyectos.tipo, proyectos.fecha, usuarios.id as
usuario_id from proyectos, usuarios where proyectos.usuario_id=usuarios.id
and usuarios.id in ".$array_users." order by fecha,titulo


Las consultas funcionan bien y bastante rapidas con pocos registros pero me
gustaria contemplar la posibilidad de optimizarlas para un futuro
crecimiento de dichas tablas.
Gracias por vuestra ayuda.
 

Leer las respuestas

#1 Alejandro Mesa
11/03/2009 - 13:48 | Informe spam
Angel,

Creo que deberias expandir un poco mas tu pregunta, pues no nos has dado
suficiente informacion como para darte alguna sugerencia.

1 - La sentencia que incluyes no es una sentencia de T-SQL.
2 - No nos das informacion sobre la estructura de las tablas involucradas en
la sentencia, incluyendo restricciones e indices.

Aqui puedes encontrar un par de herramientas que te pueden ayudar a hacer
pruebas de estres sobre tu base de datos en SQL Server 2000.

Description of the SQL Server Performance Analysis Utilities Read80Trace and
OSTRESS
http://support.microsoft.com/kb/887057


AMB


"Angel" wrote:

Hola a todos. Tengo una bbdd montada en sql 2000 con ultimo sp y fix.
Estoy corriendo una serie de consultas que me gustaria saber si se pueden
optimizar. Son las siguientes:


Buscamos el usuario del que sabemos su id, email o telefono

select * from usuarios where ((".strlen($id).">0 and
usuarios.id='".sql_quote($id)."') or (".strlen($email).">0 and
usuarios.email='".sql_quote($email)."') or (".strlen($telf).">0 and
(usuarios.telefono1='".sql_quote($telf)."' or
usuarios.telefono2='".sql_quote($telf)."')))


Si existe, mantenemos los datos en $row_user y buscamos todos los usuarios
que tienen algn dato de contacto en comn con l

select * from usuarios where 1=2 or (".strlen($row_user["email"]).">0 and
usuarios.email='".sql_quote($row_user["email"])."') or
(".strlen($row_user["telefono1"]).">0 and
(usuarios.telefono1='".sql_quote($row_user["telefono1"])."' or
usuarios.telefono2='".sql_quote($row_user["telefono1"])."')) or
(".strlen($row_user["telefono2"]).">0 and
(usuarios.telefono1='".sql_quote($row_user["telefono2"])."' or
usuarios.telefono2='".sql_quote($row_user["telefono2"])."'))


Guardamos todos los usuarios resultantes en una variable y buscamos todos
los proyectos cuyo campo usuario_id est contenido en esa variable

select distinct proyectos.id as proyectos_id, proyectos.titulo as titulo,
proyectos.cuerpo as cuerpo, proyectos.tipo, proyectos.fecha, usuarios.id as
usuario_id from proyectos, usuarios where proyectos.usuario_id=usuarios.id
and usuarios.id in ".$array_users." order by fecha,titulo


Las consultas funcionan bien y bastante rapidas con pocos registros pero me
gustaria contemplar la posibilidad de optimizarlas para un futuro
crecimiento de dichas tablas.
Gracias por vuestra ayuda.

Preguntas similares