Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL são meus índices bons?


Escreva a consulta desta forma:
SELECT *
    FROM orders
    JOIN users  ON orders.id_user = users.id
    WHERE orders.status='new'

Não especifique quais índices usar.

Começando com o WHERE cláusula, parece que isso pode ser útil:INDEX(status) . Mas como "status" soa como uma "bandeira" com baixa cardinalidade, o otimizador pode decidir ignorar o índice e simplesmente fazer uma varredura na tabela. Tudo bem. Tudo bem porque é mais rápido fazer uma varredura de tabela do que saltar entre um índice e os dados, quando o índice não é muito seletivo. Em qualquer caso, deixe a decisão para o Optimizer.

Agora que está lidando com orders , ele precisa JOIN para users . A única maneira de fazer isso é ter um índice em id . Esse nome ("id") implica que pode ser a PRIMARY KEY , é isso? (Por favor, forneça SHOW CREATE TABLE .)

Indexar livro de receitas

A outra consulta que você mencionou deve ser escrita
SELECT * FROM users WHERE id=33

E, como já discutido, o índice (PRIMARY KEY ?) em id é a coisa certa.

Não há vantagem (para os SELECTs fornecidos , pelo menos) para INDEX(status, id_user) . Sua seleção inclui todas as colunas (* ); ele buscou apenas id_user , então tal índice estaria "cobrindo" e teria alguma vantagem.