[MASOCH-L] Mysql
Leonardo Rodrigues Magalhães
leolistas at solutti.com.br
Sun Oct 28 08:47:58 -03 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