Pergunta

Estou executando o MySQL Server no servidor que tem as seguintes especificações -

Dual Xeon Quad Core 2.0, 2048 MB RAM, 1x 160 GB SATA Fedora Core + SSH

Mas o processo MySQL para inserir 10000 registros leva mais de 100% da CPU e até 1 GB de RAM. É uma declaração de inserção simples.

Por que o MySQL está tomando muita memória e o que pode fazer a respeito?.

Foi útil?

Solução

A parte mais pesada da sua consulta é a seleção:

Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer
Where UserID Between 1 and 5000
and CustomerID in (Select CustId from Cust_Details Where CustName like 'Mi%')

A consulta aninhada provavelmente é repetida para cada linha. Você pode verificar isso em execução EXPLAIN PLAN + Toda a consulta selecionada. Eu acho que o operador 'LIGE' é usado contra uma coluna não indexada. Nesse caso (like 'xyz%') Um índice simples pode melhorar muito o desempenho.

Adicionado: Além disso, selecione Custid ... deve produzir IDs de saída maiores que 5000, que não são necessários. Um índice composto (custid, custname) em cust_details também deve ser útil.

Tente usar uma junção: em vez disso:

Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer c, Cust_Details cd
Where c.UserID Between 1 and 5000
and c.CustomerID=cd.CustId
and left(cd.CustName) = 'Mi'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top