[MASOCH-L] Mysql

Leonardo Rodrigues Magalhães leolistas at solutti.com.br
Sun Oct 28 08:47:58 BRST 2007



Marcos Dutra escreveu:
> Obrigado pela ajuda, olha só que interessante, ontem eu fiz uma pesquisa bem
> simples no modo de ver no banco de dados, queria ver o número de venda dos
> vendedores no ano de 2004 no banco geral na tabela vendas, quado fazia essa
> pesquisa travava todos que estavam em outra tabela no mesmo banco chamado
> clientes, tanto para pesquisa como para alteração até o fim dessa pesquisa.
> O select está abaixo e é feito por um programa em delphi.
>
> select count(*) as total from vendas where func = "RAPHAEL" and
> left(datahora,10) = "2004-01-01"
>
> Pelo que eu entendi o cara que montou o programa queria fazer a pesquisa da
> data de 2004 de cada vendedor para um relatório, ele estava fazendo com um
> like mas trocou depois com o left, mas ainda não entendi do porque isso
> afeta outras tabelas nada relacionado. Essa tabela tem mais de 1,3GB de
> dados.
>   

    Pra pesquisar data dessa forma, com left e like, podemos afirmar que 
quem modelou o banco e fez o software armazenou a data num char/varchar 
da vida. Não que isso não funcione ... mas talvez não seja a forma mais 
inteligente de armazenar datas. Numa tabela com 5-10 mil registros, 
talvez não faça diferença. Mesmo o scan completo da tabela acontecendo, 
se a quantidade de registros for pequena, você provavelmente nem vai 
perceber.

    Mas quando a quantidade de informação começar a crescer, 1.3Gb de 
dados como você afirmou, ai realmente as coisas não podem ser feitas de 
qualquer jeito.

    Não adianta nada a gente discutir MyISAM x InnoDB, enfiar memória na 
máquina, discutir row lock ou table lock, etc etc ... nada disso adianta 
se a sua base de dados foi mal modelada.

    A boa modelagem da base de dados é absolutamente fundamental para 
uma boa performance do banco. Pra isso, é necessário que quem for 
modelar o banco saiba exatamente o que vai acontecer. E nem sempre 
existe a forma 'certa' de armazenar. A forma de armazenar vai depender 
de como você precisa pesquisar, qual frequência das pesquisas, se vai 
ter mais pesquisas ou mais inserções ... tudo isso pode fazer com que a 
informação seja armazenada de uma forma diferente, pra privilegiar 
pesquisar ou privilegiar inserções ... e por ai vai. Modelar (bem) uma 
base de dados é uma arte conhecida por poucos  :)

> Além disso tem outras pesquisas também que eu vou verificar. Sobre os
> indices criei os índices, realmente ajuda mas ainda estão esquisitos, queria
> saber tb se a mudança do MyISAM para o INNODB faz alguma diferença
> signicativa, aqui os programas todos fazem like e deixa a pesquisa pesada e
> não temos como mudar isso na empresa.
>   

    InnoDB é mais pesado que MyISAM. Se o problema é performance, nem 
pense em fazer essa mudança. Pra outras situações, controle de transação 
por exemplo, aí sim a mudança é fundamental.

    Sobre os LIKEs, é impossível fugir totalmente deles. Uma hora ou 
outra você vai precisar. Mas o LIKE precisa ser usado com bastante 
cautela, ainda mais quando sabe-se que ele vai ser feito em tabelas 
grandes. Não dá pra evitar, mas é tarefa do desenvolvedor utilizá-lo 
somente nos momentos onde é impossível não utilizá-lo.

    Se seu sistema faz uso intenso (e desnecessário) de LIKEs, talvez 
nada vai fazer que seus problemas de performance sejam solucionados :(

-- 


	Atenciosamente / Sincerily,
	Leonardo Rodrigues
	Solutti Tecnologia
	http://www.solutti.com.br

	Minha armadilha de SPAM, NÃO mandem email
	gertrudes at solutti.com.br
	My SPAMTRAP, do not email it






More information about the masoch-l mailing list