Проблема производительности "Hash Match (Aggregate)" - PullRequest
0 голосов
/ 23 марта 2019

У меня есть таблица (упрощенная), которая выглядит так:

Trabajador  fkDocumentoTipo numeroDocumento
1           1               doc_1_1
1           2               doc_1_2
2           1               doc_2_1
2           2               doc_2_2

Я запускаю этот запрос, чтобы получить все значения для работника в одну строку:

SELECT
    trabajador,
    MAX(CASE WHEN fkDocumentoTipo = 1 THEN numeroDocumento END) AS 'RG',
    MAX(CASE WHEN fkDocumentoTipo = 2 THEN numeroDocumento END) AS 'CPF',
    MAX(CASE WHEN fkDocumentoTipo = 3 THEN numeroDocumento END) AS 'TitulodeEleitor',
    MAX(CASE WHEN fkDocumentoTipo = 4 THEN numeroDocumento END) AS 'PIS',
    MAX(CASE WHEN fkDocumentoTipo = 5 THEN numeroDocumento END) AS 'CTPS',
    MAX(CASE WHEN fkDocumentoTipo = 6 THEN numeroDocumento END) AS 'Reservista',
    MAX(CASE WHEN fkDocumentoTipo = 7 THEN numeroDocumento END) AS 'CNH',
    MAX(CASE WHEN fkDocumentoTipo = 8 THEN numeroDocumento END) AS 'NIT',
    MAX(CASE WHEN fkDocumentoTipo = 11 THEN numeroDocumento END) AS 'RIC',
    MAX(CASE WHEN fkDocumentoTipo = 12 THEN numeroDocumento END) AS 'OC'
FROM dados_documento
GROUP BY trabajador

При вызове этого запроса в моей реальной таблице с реальными значениями, кажется, есть две узкие места (особенно "Hash Match (Aggregate)": enter image description here

enter image description here

enter image description here

У меня есть индексы для столбцов, которые используются в запросе: enter image description here

И они, похоже, в хорошем состоянии: enter image description here

Сейчас для отображения почти 20 000 строк требуется ~ 7 секунд, что нормально, если он потребляется сам, но проблема в том, когда он вызывается другими представлениями. Это действительно замедляет работу.

  1. Есть ли способ повысить производительность непосредственно по этому запросу?
  2. Есть ли способ повысить производительность этого запроса (который заключен в представление), чтобы другие представления могли использовать его быстрее?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...