tempo de selecção de carregamento aninhada no mysql
Pergunta
Eu tenho um pacotes de mesa
pacotes contém 2 campos id total e
ambos são comprimento bigint 20 e chaves primárias
somente ID é auto incremento
em cada total recorde = id
eu tenho 10000 registros digamos id = 1-10000 e Total = 1-10000
eu tenho 2 quase idênticas consultas 1 conduzir a uma muito, muito tempo de carregamento e um completa quase que instantaneamente.
tempo de carregamento muito longo:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
curto tempo de carregamento:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
isso acontece enquanto os valores de ID e totais são idênticos.
Solução
ambos são comprimento bigint 20 e chaves primárias
Você não pode ter duas chaves primárias em uma tabela.
Parece que você não tem um índice em packets.total
Criar-lo e ver se isso ajuda:
CREATE INDEX ix_packets_total ON packets (total)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow