elb*_*ert 5 mysql performance select
我对这一切都很陌生,所以要温柔:)。
我有大型医疗数据库,我需要根据选定的医生为患者提取数据。
现在我建立了一个病人名单
SELECT patID
FROM appointments
WHERE docID IN ('docid1', 'docid2', ..... , 'docidn')
Run Code Online (Sandbox Code Playgroud)
一旦我得到我的病人名单,我就会在从一大堆病人相关的表格中提取数据时使用它。
根据我最初的医生名单,我最终可以得到超过 20,000 名的患者名单。系统中的患者总数接近 1,000,000。
然后我拿我的病人名单开始从其他表中获取数据,或多或少是这样的
Select *
FROM xrays
WHERE patID IN ('patid1', 'patid2', 'paid3',....., 'patidn' )
Run Code Online (Sandbox Code Playgroud)
我根据第一部分中的列表构建了 patids 列表。
可以想象,对于 20,000 名患者列表,上述查询需要很长时间。
关于更好的方法的任何建议?
这就是Join的用途。您不必获取患者 ID 列表,然后将它们发送回 SQL 引擎。您可以将两个查询合二为一,使用JOIN
:
SELECT x.*
FROM xrays AS x
JOIN appointments AS a
ON a.patID = x.patID
WHERE a.docID IN ('docid1', 'docid2', ..... , 'docidn')
ORDER BY x.patID --- optional so your application gets
--- the data of patients, ordered.
Run Code Online (Sandbox Code Playgroud)
要检查的其他事项是您在表上的索引。根据经验,至少在连接中使用的所有列,例如您的docID
, patID
,都应该有一个索引。