consulta interna ou várias consultas que seria resultado em um melhor desempenho para o mysql?

Mel Shah:

consulta interna:

select up.user_id, up.id as utility_pro_id from utility_pro as up
join utility_pro_zip_code as upz ON upz.utility_pro_id = up.id and upz.zip_code_id=1
where up.available_for_survey=1 and up.user_id not in (select bjr.user_id from book_job_request as bjr where 
((1583821800000 between bjr.start_time and bjr.end_time) and (1583825400000 between bjr.start_time and bjr.end_time)))

Dividido em duas consultas:

  1. select up.user_id, up.id as utility_pro_id from utility_pro as up join utility_pro_zip_code as upz ON upz.utility_pro_id = up.id and upz.zip_code_id=1

  2. Select bjr.user_id as userId from book_job_request as bjr where bjr.user_id in :userIds and (:startTime between bjr.start_time and bjr.end_time) and (:endTime between bjr.start_time and bjr.end_time)

Nota : De acordo com o meu entendimento, quando única consulta será executada utilizando consulta interna fará a varredura de todos os dados de book_job_request mas ao usar linhas múltiplas consultas com IDs de usuário especificadas serão verificados.

Qualquer outra opção melhor para a mesma operação que não estes dois também é apreciado.

Morango :

Espero que a consulta é suposto ser mais parecido com isto:

SELECT up.user_id
     , up.id utility_pro_id 
  FROM utility_pro up
  JOIN utility_pro_zip_code upz 
    ON upz.utility_pro_id = up.id
  LEFT
  JOIN book_job_request bjr 
    ON bjr.user_id = up.user_id
   AND bjr.end_time >= 1583821800000
   AND bjr.start_time <= 1583825400000
 WHERE up.available_for_survey = 1 
   AND upz.zip_code_id = 1
   AND bjr.user_id IS NULL

Para obter mais ajuda com a otimização (ou seja, quais índices para fornecer) Precisaríamos SHOW CREATE TABLE para todas as tabelas relevantes, bem como a EXPLICAR para o acima

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=282209&siteId=1
Recomendado
Clasificación