La requête MySQL revient trop lentement
P粉727531237
P粉727531237 2024-03-30 18:25:44
0
1
368

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粉727531237
P粉727531237

répondre à tous(1)
P粉124890778

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).

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!