Heim > Fragen und Antworten > Hauptteil
Ich habe eine Anfrage geschrieben. Es funktioniert besser. Aber derzeit haben alle Tabellen 100.000 Zeilen und eine meiner Abfragen gibt zu langsam zurück. Können Sie mir vorschlagen, wie ich meine Abfrage optimieren kann?
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
Bitte beachten Sie, dass die „Patienten-ID“ hier Varchar ist.
P粉1248907782024-03-31 00:07:43
这可能运行得更快:
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
这些索引可能有帮助:
tbl_location: INDEX(CODE) tbl_gxp_information: INDEX(center_id, patientID) -- (either order)
由于 OR
优化不佳,可能最好为 communicate_with_pt
选择 NULL 或空字符串(以避免对两者进行测试)。