У меня есть много таблиц, которые требуют объединения перед отображением данных.
Также я использую внутреннее соединение и хочу показать первые 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
ключ - это имя переменной строкового типа.
Любая стратегия оптимизации для проблемы приветствуется.
Я уже проиндексировал столбец для сортировки (хотя и не в качестве первичного ключа), но основная проблема - соединение.
Одним из способов может быть денормализация, но есть много столбцов для отображения.