【发布时间】:2019-05-23 13:31:24
【问题描述】:
我有很多表需要在获取要显示的数据之前进行连接。
我也在使用内部连接,我只想显示前 20 个结果。
所以问题是目前查询正在扫描整个表,因为它会先排序,然后提取前 20 行,并且我无法将要排序的列作为主索引,尽管它已被索引。
第二件事是查询也使用了联接,所以有没有办法从父表中获取前 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是一个字符串类型的变量名。
感谢任何针对该问题的优化策略。
我已经为要排序的列建立了索引(虽然不是作为主键),但主要问题是加入。
一种方法可以是非规范化,但要显示很多列。
【问题讨论】:
-
没有看到查询和对数据的理解,任何人都无法帮助您。
-
@GordonLinoff 添加了查询。
-
请用它所在的表来限定每一列。并提供
SHOW CREATE TABLE。并告诉我们like key打算做什么。并提供EXPLAIN SELECT ... -
我假设
EncounterInformationBean表比LastName表有更多的数据。isActive列来自哪里?索引是否至少包含您的WHERE条件中的任何列? -
另一个问题,你想在哪个表上加上
LIMIT?因为您提到 “有没有办法让我从父表中获得前 20 个结果” 。如果是这样,您可以子查询父表以首先返回前 20 行,然后将其与另一个表连接。我认为它会更快。
标签: mysql sql optimization inner-join limit