Eu tenho uma consulta seleção simples:
SELECT *
FROM `inventory`
WHERE account_id = "1"
AND marketplace_id = "2"
AND sku = "3"
AND `date` = "4"
Ele tem uma condição em quatro campos, por conseguinte, o índice natural é um desses quatro campos.
Eu tenho as seguintes índices:
e quando eu explicar a consulta, eu recebo: Dizê-lo é usando o 2º índice da lista, ao invés do 3º ou 4º.
Se eu usar USE INDEX(account_id__marketplace_id__sku__date)
na minha consulta, ele usa-lo com sucesso, e filtra 100%.
Eu tentei ANALYZE TABLE
e OPTIMIZE TABLE
para reconstruir os índices, mas a situação permanece a mesma!
Da minha experiência com outras tabelas, se eu agora eliminar índices 2 e 3, e recriá-las, de modo que o maior índice é o primeiro na ordem, a consulta irá selecionar esse índice, ou seja, ele seleciona o primeiro que partidas em vez de um máximas Combine.
- Versão do servidor MySQL : 5.7.25-google-log
- phpMyAdmin MySQL versão do cliente : 5.5.59
Mysql escolherá índice pelo tamanho de dados da tabela;
Você pode tentar inserir 600000 registros em inventário, mantenha o valor do registro aleatório, e executar "explicar"