Quero obter o mínimo de user_id para um tenant_id.
mecanismo mysql - innodb
mesa -users(id, tenant_id, is_deleted, creation_date)
pacote(id)
sk(tenant_id, creation_date)
consulta1select min(id) from users where tenant_id = 123;
consulta2 select id from users where tenant_id = 123 order by id limit 1;
Observei que a consulta1 é mais rápida que a consulta2. Além disso, se eu forçar o índice na consulta2, ele usará o filesort além de usar o índice. Quero saber por que a consulta1 é mais rápida e na consulta2 por que o filesort está sendo usado, pois o innodb adiciona pk no final do sk.
Primeira consulta. O servidor filtra as linhas pelo
tenant_id
valor fornecido usando o índice e, em seguida, investiga a expressão de chave primária oculta que faz parte de qualquer índice e encontra o mínimoid
.Segunda consulta. O servidor verifica toda a tabela (devido à chave primária, as linhas no corpo da tabela já estão classificadas
id
) até que o especificadotenant_id
seja encontrado.O índice by
(tenant_id, id)
parece ser o mais eficiente. - Akina