Mysql: consulta lenta

Forum sobre SQL.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Mysql: consulta lenta

Mensagem por cjp »

Agradeço os esclarecimentos, muito úteis.
Refiz os índices, conforme tua explicação.
Mas segue uma dúvida: o DELETE usa índices? Porque a questão neste post é para um comando DELETE.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mysql: consulta lenta

Mensagem por JoséQuintas »

cjp escreveu:Mas segue uma dúvida: o DELETE usa índices? Porque a questão neste post é para um comando DELETE.
Já esqueceu ?
Não lembra quando começou a usar índices ?
Começou justamente porque não estava nem conseguindo excluir.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Mysql: consulta lenta

Mensagem por dbsh »

Quando você faz uma operação que altera a informação no banco de dado, (INSERT/UPDATE/DELETE), os índices tem que ser atualizado.
Quando você usa WHERE o motor do bando de dados usa o índice para localizar a informação.
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Mysql: consulta lenta

Mensagem por dbsh »

Quanto menos informação o banco de dado tem para manipular, mais rápido vai ser o processo.

CASO DE USO MEU:
Quando o banco de dado tem mais de 1 milhão de linhas e tem mais de 1 ano e meio desde o ultimo arquivamento, transfiro a informação para uma tabela auxiliar, guardo a informação do ultimo arquivamento.

Quando o operador seleciona a data inicial menor que a data de arquivamento, automaticamente a opção de arquivamento é selecionada, deixando a opção para o operador desativar, no começo deu muito trabalho, hoje é automático quando vou fazer um relatório novo, implemento deste jeito.

EX:

Código: Selecionar todos

sSQL := "selet * from venda_detalhe where ..."
IF DtInicial <= DtArquivo
  //repito a query e só troco `venda_detalhe` por `venda_detalhe_a`
  sSql += ' union all ' +  Strtran(sSQL, "venda_detalhe", "venda_detalhe_a")
ENDIF
Uso a nomenclatura `tabela_original_a`.
Exemplo de uso com duas tabelas, unido a informação como um todo, 5 estatística de venda, na mesma query.

Código: Selecionar todos

SELECT p0.id_produto, COUNT(*) AS QuantidadeItemVendido, SUM(p0.quantidade) AS TotalVendido, MIN(p0.quantidade) AS MenorQtdVendida, MAX(p0.quantidade) AS MaiorQtdVendida, FORMAT(AVG(p0.quantidade), 3) MediaDeVenda
FROM (
	SELECT p1.id_produto, p1.quantidade  FROM venda_detalhe p1 WHERE p1.data_venda <= '2022-01-01'
	UNION ALL
	SELECT p2.id_produto, p2.quantidade FROM venda_detalhe_a p2 WHERE p2.data_venda <= '2022-01-01'
) p0
GROUP BY p0.id_produto;
Você pode usar também particionamento.
Como é raro meus cliente usar informações com mais de 1 ano e 3 messes, para estatística, o arquivamento funcionou bem para mim.
Anexos
Você verá que tem um checkbox com a opção 'arquivadas&quot;
Você verá que tem um checkbox com a opção 'arquivadas"
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Responder