使用内部联接,限制和排序时,限制SQL中联接的行数

时间:2019-05-22 12:11:44

标签: mysql sql optimization inner-join limit

我有很多表,它们需要先连接才能获取数据。

我也正在使用内部联接,我只想显示前20个结果。

所以问题在于,当前查询正在扫描整个表,因为它将首先进行排序,然后提取前20行,尽管索引已建立,但我无法将要排序的列作为主索引。

第二件事是查询也使用Joins,所以有一种方法可以从父表中获取前20个结果(父表本身中存在排序的列),然后减少要联接的行,从而减少联接时间? 查询就像:

select distinct patientFirstName as patientFirstName, patientLastName 
as patientLastName from EncounterInformationBean inner join LastName 
ON
EncounterInformationBean.id=LastName.uid
where
patientFirstName like key and isActive=1 order by patientFirstName
LIMIT 20

key是字符串类型的变量名。

感谢您针对该问题的任何优化策略。

我已经索引了要排序的列(虽然不是作为主键),但是主要问题是联接。

一种方法可以是非规范化,但是要显示很多列。

1 个答案:

答案 0 :(得分:0)

  • 不要使用 DISTINCT
  • 正确拼写 ORDER BY
  • 到底是什么
  • 具有 INDEX(isActive,PatientFirstName)