У меня есть таблица (упрощенная), которая выглядит так:
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)":
У меня есть индексы для столбцов, которые используются в запросе:
И они, похоже, в хорошем состоянии:
Сейчас для отображения почти 20 000 строк требуется ~ 7 секунд, что нормально, если он потребляется сам, но проблема в том, когда он вызывается другими представлениями. Это действительно замедляет работу.
- Есть ли способ повысить производительность непосредственно по этому запросу?
- Есть ли способ повысить производительность этого запроса (который заключен в представление), чтобы другие представления могли использовать его быстрее?