recherche

Maison  >  Questions et réponses  >  le corps du texte

La requête MySQL revient trop lentement

J'ai rédigé une requête. Cela fonctionne mieux. Mais actuellement, toutes les tables comportent 100 000 lignes et l'une de mes requêtes revient trop lentement. Pouvez-vous me suggérer comment optimiser ma requête ?

select * 
from tbl_xray_information X 
WHERE locationCode = (SELECT t.id 
                      from tbl_location t 
                      where CODE = '202') 
  AND ( communicate_with_pt is NULL || communicate_with_pt='')
  AND x.patientID NOT IN (SELECT patientID 
                          FROM tbl_gxp_information 
                          WHERE center_id = '202')
order by insertedON desc LIMIT 2000

Veuillez noter que "l'identifiant du patient" ici est varchar.

P粉727531237P粉727531237234 Il y a quelques jours459

répondre à tous(1)je répondrai

  • P粉124890778

    P粉1248907782024-03-31 00:07:43

    Ceci pourrait courir plus vite :

    select  *
        from  tbl_xray_information AS X
        WHERE  locationCode = 
            ( SELECT  t.id
                from  tbl_location t
                where  CODE = '202'
            )
          AND  ( x.communicate_with_pt is NULL 
              OR x.communicate_with_pt = '' )
          AND  NOT EXISTS ( SELECT 1 FROM tbl_gxp_information
                  WHERE x.patientID = patientID
                    AND center_id = '202' )
        order by  insertedON desc
        LIMIT  2000

    Ces index peuvent être utiles :

    tbl_location:  INDEX(CODE)
    tbl_gxp_information:  INDEX(center_id, patientID)  -- (either order)

    Étant donné que OR est mal optimisé, OR 优化不佳,可能最好为 communicate_with_ptil serait peut-être préférable de choisir NULL ou la chaîne vide pour communiquer_avec_pt (pour éviter de tester les deux).

    répondre
    0
  • Annulerrépondre