Query with slow subquery

0

I have the following query;

SELECT id, 
   oficina, 
   sector, 
   nombre, 
   correo, 
   telefono, 
   ext, 
   comentario, 
   datos_solicitudes.fecha, 
   fecha_no_laboral, 
   prioridad, 
   estado, 
   asignado, 
   fecha_ultima_respuesta, 
   expediente, 
   orden_servicio, 
   tipo_solicitud, 
   provincia, 
   municipio, 
   seccion, 
   localidad, 
   calle, 
   aviso_acceso_finca, 
   area_ejecucion, 
   oficina_comercial, 
   numero_puerta, 
   duplicador, 
   referencia, 
   nombre_finca, 
   tipo_finca, 
   estado_finca, 
   nic_anterior, 
   nic_posterior, 
   entidades_comerciales.ct, 
   tipo_suministro, 
   tipo_conexion, 
   tarifa, 
   tension_voltaje, 
   cgv, 
   nombre_suministro, 
   coordenadasx, 
   coordenadasy, 
   entidades_comerciales.nis, 
   entidades_comerciales.nif, 
   (SELECT comentarios.fecha_comentario 
    FROM   comentarios 
    WHERE  comentarios.id_solicitud = datos_solicitudes.id 
           AND comentarios.fecha_comentario >= "2017-12-27 08:00:00" 
           AND comentarios.fecha_comentario <= "2017-12-27 23:00:00" 
    ORDER  BY comentarios.fecha_comentario ASC 
    LIMIT  1) AS coment_first, 
   (SELECT comentarios.comentario 
    FROM   comentarios 
    WHERE  comentarios.id_solicitud = datos_solicitudes.id 
           AND comentarios.fecha_comentario >= "2017-12-27 08:00:00" 
           AND comentarios.fecha_comentario <= "2017-12-27 23:00:00" 
    ORDER  BY comentarios.fecha_comentario DESC 
    LIMIT  1) AS coment_last 
   FROM   datos_solicitudes 
   INNER JOIN entidades_comerciales 
           ON id = id_solicitud 
   WHERE  datos_solicitudes.fecha >= "2017-12-27 08:00:00" 
   AND datos_solicitudes.fecha <= "2017-12-27 23:00:00" 
   AND estado <> 'En Bandeja' 

The problem is that the next block slows down my query because it queries all the data in the comment table (about 30 thousand current records);

(SELECT comentarios.fecha_comentario 
    FROM   comentarios 
    WHERE  comentarios.id_solicitud = datos_solicitudes.id 
           AND comentarios.fecha_comentario >= "2017-12-27 08:00:00" 
           AND comentarios.fecha_comentario <= "2017-12-27 23:00:00" 
    ORDER  BY comentarios.fecha_comentario ASC 
    LIMIT  1) AS coment_first, 
   (SELECT comentarios.comentario 
    FROM   comentarios 
    WHERE  comentarios.id_solicitud = datos_solicitudes.id 
           AND comentarios.fecha_comentario >= "2017-12-27 08:00:00" 
           AND comentarios.fecha_comentario <= "2017-12-27 23:00:00" 
    ORDER  BY comentarios.fecha_comentario DESC 
    LIMIT  1) AS coment_last 

Perform the query in the console and I received the following;

The ID of the table 'request_data' is an INT, while the 'Id_application' of the 'comments' table is varchar.

    
asked by Albert 23.01.2018 в 20:09
source

0 answers