Decepicionado com o Interbase

Firebird

07/08/2003

Que raiva, esse interbase é uma bosta, o coisa lenta da p..............
Meu banco está com 70mb, e já ta quase parando, imagina quando xegar nos 1gb, ele vai explodir de tão lento, não consigo nem executar este SQL aqui ó:

SELECT
PEDIDOVENDA.CD_EMPRESA,
PEDIDOVENDA.CD_DIVISAO,
PEDIDOVENDA.NR_LOTE,
PEDIDOVENDA.CD_VENDEDOR,
PEDIDOVENDA.VL_TROCA_MASSA,
PEDIDOVENDA.VL_TROCA_VENDA,
PEDIDOVENDAITEM.VL_COMISSAO,
PEDIDOVENDAITEM.CD_PRODUTO,
PEDIDOVENDAITEM.VL_PEDIDOITEM
FROM PEDIDOVENDA, PEDIDOVENDAITEM, PRODUTO
WHERE PEDIDOVENDA.CD_EMPRESA = PEDIDOVENDAITEM.CD_EMPRESA
AND PEDIDOVENDA.CD_DIVISAO = PEDIDOVENDAITEM.CD_DIVISAO
AND PEDIDOVENDA.CD_VENDA = PEDIDOVENDAITEM.CD_VENDA
AND PEDIDOVENDA.CD_VENDEDOR = PEDIDOVENDAITEM.CD_VENDEDOR
AND PEDIDOVENDAITEM.CD_EMPRESA = PRODUTO.CD_EMPRESA
AND PEDIDOVENDAITEM.CD_DIVISAO = PRODUTO.CD_DIVISAO
AND PEDIDOVENDAITEM.CD_PRODUTO = PRODUTO.CD_PRODUTO

Tem apenas 3 tabelas, mas não executa de jeito nem um !!!!!!!!!!!
se alguém souber uma forma de deixar o interbase mais rápido, porq favor me explica como, mas se não souber, alguém poderia me informar quanto ta custando o banco de dados oracle?
ou se alguem poderia me vender uma copia do oracle? :(


Thoor Cobain

Thoor Cobain

Curtidas 0

Respostas

Breno Abreu

Breno Abreu

07/08/2003

Voce ta trabalhando com colunas indexadas. E importante indexar as colunas para melhorar o tempo de resposta.


GOSTEI 0
Thoor Cobain

Thoor Cobain

07/08/2003

[quote:76b678c876=´Breno Abreu´]Voce ta trabalhando com colunas indexadas. E importante indexar as colunas para melhorar o tempo de resposta.[/quote:76b678c876]

pode me dar algum exemplo de algum SQL com colunas indexadas?

obrigado...


GOSTEI 0
Maxdangelo

Maxdangelo

07/08/2003

Para que suas consultas fiquem mais rápidas utilize as junções para evitar esta demora em seu banco.

Ex de junção

SELECT *
FROM tab1 A [b:3929d64b27]INNER[/b:3929d64b27] [b:3929d64b27]JOIN [/b:3929d64b27]tab2 B
[b:3929d64b27]ON[/b:3929d64b27] A.cod = B.cod

SELECT CITY, STATE_NAME FROM CITIES C
LEFT JOIN STATES S ON S.STATE = C.STATE

WHERE C.CITY STARTING WITH ´San´;

Qdo fazemos uma junção o interbase irá gerar o conjunto somente sobre aquilo que encontar em ambas as tabelas (INNER JOIN), se utilizarmos o WHERE ele irá gerar dois conjuntos e só depois irá filtrá-las.

Vale a pena dar uma olhada em (INNER JOIN, LEFT JOIN, RIGHT JOIN).

Espero que tenha ajudado!


GOSTEI 0
Maxdangelo

Maxdangelo

07/08/2003

Tbm pode seguir a dica do companheiro e usar índices.

Aqui vai um exemplo:

CREATE INDEX nome ON tabela (coluna);

CREATE INDEX NAMEX ON EMPLOYEE (LAST_NAME, FIRST_NAME);

Certo!


GOSTEI 0
Crpavao

Crpavao

07/08/2003

Ô Cara, numa boa.
Acho o Interbase bem eficiente. Já tenho uns 10 Sistemas com este Banco e ele nunca me decepcionou.
Tenho Bancod de dados de até 100MB e roda numa boa.
Se vc for usar o Oracle aí vc vai ver o que é chato.
Crie indices auxiliares nestas tabelas e verá que esta query ficará rapidinha.
Prá cada join faça um índice, por exemplo.
Qq coisa tamos aqui.

Um abraço.


GOSTEI 0
Afarias

Afarias

07/08/2003

Não perca a paciência antes de aprender a usar completamente a ferramenta. Tenho sistemas com bancos de +500MB rodando extremamente eficiente.

Existem vários fatores q podem influenciar a performance do sistema, como:

1- projeto do banco de dados
2- construção de SELECTS apropriados
3- projeto do sistema
4- Configuração do servidor (IB e SO)
5- Rede
6- Hardware


Procure conhecer a ferramenta e avaliar onde está errando. Alguns artigos no site http://www.firebase.com.br/ podem ser úteis.


T+


GOSTEI 0
Afarias

Afarias

07/08/2003

Complementando,

por favor, envie questões sobre INTERBASE/FIREBIRD para o fórum apropriado IB/FB.


T+


GOSTEI 0
POSTAR