Estou tentando melhorar o desempenho da seguinte consulta, que leva mais de 1 minuto para ser executada:
SELECT *
FROM test
WHERE ( created_at < '2023-3-31 06:10:20.871' )
AND ( ( id > '2a95048f' )
OR ( id = '2a95048f'
AND created_at > '2022-12-27 23:53:24.958' ) )
ORDER BY id ASC,
created_at ASC
LIMIT 1000;
Alterei a consulta trocando a ordem no ORDER BY e a consulta retornou resultados em 549ms:
SELECT *
FROM test
WHERE ( created_at < '2023-3-31 06:10:20.871' )
AND ( ( id > '2a95048f' )
OR ( id = '2a95048f'
AND created_at > '2022-12-27 23:53:24.958' ) )
ORDER BY created_at ASC,
id ASC
LIMIT 1000;
Aqui estão algumas informações sobre os índices:
- ID - Cardinalidade 6,8 milhões, único
- CREATED_AT - Cardinalidade 7,1 milhões, NÃO único
Por que um é drasticamente performático que o outro?
ATUALIZAÇÃO - "MOSTRAR ÍNDICE DE TESTE"