Ограничение числа строк, соединяемых в SQL, при использовании внутреннего объединения, ограничения и порядка - PullRequest
0 голосов
/ 22 мая 2019

У меня есть много таблиц, которые требуют объединения перед отображением данных.

Также я использую внутреннее соединение и хочу показать первые 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

ключ - это имя переменной строкового типа.

Любая стратегия оптимизации для проблемы приветствуется.

Я уже проиндексировал столбец для сортировки (хотя и не в качестве первичного ключа), но основная проблема - соединение.

Одним из способов может быть денормализация, но есть много столбцов для отображения.

1 Ответ

0 голосов
/ 23 мая 2019
  • Не используйте DISTINCT
  • Заклинание ORDER BY правильно
  • Что за хрень like key
  • Есть INDEX(isActive, patientFirstName)
...