On Sun, Mar 9, 2008 at 5:19 PM, Ribamar Sousa <[EMAIL PROTECTED]> wrote: > Em 09/03/08, Roberto Mello<[EMAIL PROTECTED]> escreveu: > > > Nao sei se voce entendeu que se tu fazes um count() na tabela inteira, > > tu NAO ESTAS USANDO INDICE NENHUM. > > Não entendi, pois sinceramente não sabia disso.
Isso é um ponto de confusão freqüente. Os aficionados do MySQL freqüentemente fazem "benchmarks" em que comparam a performance do COUNT() (sem nenhuma condição) do MySQL com o do PostgreSQL como "prova" que o MySQL é "muito mais rápido". Ora, quando usando MySQL com tabelas MyISAM o MySQL faz um cache do número de registros, então a operação COUNT() sem condições retorna instantâneamente. MyISAM não tem que se preocupar com transações nem nada. No PostgreSQL se você fizer uma COUNT(), o valor tem que ser condizente com a *transação* onde a consulta foi feita. Ou seja, para uma mesa tabela, os valores de COUNT() vão ser diferentes conforme a transação. Não se há outras razões técnicas por que não fazer um cache similar ao do MySQL para os casos onde se quisesse o valor de tuplas "committed", mas confio no PGDG (que é muito competente) que se não foi feito é por que há boas razões para tal. Outro erro freqüente em relação à índices é que botam um índice numa coluna varchar, aí fazem consultas usando lower(colunavarchar). O índice não será usado por que o índice está agindo sobre os valores normais. Para que uma consulta com lower() use um índice, tem que se criar um outro índice funcional, ou seja um índice em lower(minhacolunavarchar). Roberto _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
