VELOCIDADE DE ABERTURA DE BD FIREBIRD
E ai galera tudo bem?
Bom eu gostaria de trabalhar com o firebird, devido ele ter uma capacidade maior de arquivos, porém eu fiz uma tabela e inseri nela cerca de 75 mil registros, porém ao abrir o banco de dados ocorre tudo rápido, mas qualquer consulta sql faz com que ele fique muito lento, necessariamente quando abro o recordset com a consulta sql!!! Caso vcs tem uma dica de usar um outro provedor que seja mais rápido eu agradeço tb.
Dim scaminho As String
scaminho = "C:\bdFirebird\BDSYSTCOM.GDB"
Dim sql As String
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
r.Open "SELECT * from tabcliente order by clicodigo desc", "Provider=sibprovider.1;Data Source=C:\bdFirebird\BDSYSTCOM.GDB;User ID=SYSDBA;password=masterkey;SQL Dialect=3;Persist Security Info=False;", adOpenKeyset, adLockOptimistic
'Set r = c.Execute(sql)
While r.EOF = False
Me.List1.AddItem !clinome & r!clicodigo
r.MoveLast
End If
Bom eu gostaria de trabalhar com o firebird, devido ele ter uma capacidade maior de arquivos, porém eu fiz uma tabela e inseri nela cerca de 75 mil registros, porém ao abrir o banco de dados ocorre tudo rápido, mas qualquer consulta sql faz com que ele fique muito lento, necessariamente quando abro o recordset com a consulta sql!!! Caso vcs tem uma dica de usar um outro provedor que seja mais rápido eu agradeço tb.
Dim scaminho As String
scaminho = "C:\bdFirebird\BDSYSTCOM.GDB"
Dim sql As String
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Set c = New ADODB.Connection
Set r = New ADODB.Recordset
r.Open "SELECT * from tabcliente order by clicodigo desc", "Provider=sibprovider.1;Data Source=C:\bdFirebird\BDSYSTCOM.GDB;User ID=SYSDBA;password=masterkey;SQL Dialect=3;Persist Security Info=False;", adOpenKeyset, adLockOptimistic
'Set r = c.Execute(sql)
While r.EOF = False
Me.List1.AddItem !clinome & r!clicodigo
r.MoveLast
End If
Eu prefiro usar For...Next com o número do RecordCount.
r.MoveLast
r.MoveFirst
For i = 1 to r.RecordCount
...
r.MoveNext
Next
Explicando:
Usando o .EOF o programa terá de conferir a toda execução do laço se já está no fim da tabela, o que quer dizer fazer uma consulta ao BD. O que deixará o laço mais lento, naturalmente.
Com o For...Next do jeito q eu uso, ficou mais rápido, pq o laço eh executado dentro de um intervalo de números.
Fiz alguns teste aqui e ficou mais rápido, mas se algum colega discordar, poderia esclarecer pra gente qual é a maneira mais rápida de fazer um loop com registros de uma tabela.
Eu postei dúvida semelhante aqui.
r.MoveLast
r.MoveFirst
For i = 1 to r.RecordCount
...
r.MoveNext
Next
Explicando:
Usando o .EOF o programa terá de conferir a toda execução do laço se já está no fim da tabela, o que quer dizer fazer uma consulta ao BD. O que deixará o laço mais lento, naturalmente.
Com o For...Next do jeito q eu uso, ficou mais rápido, pq o laço eh executado dentro de um intervalo de números.
Fiz alguns teste aqui e ficou mais rápido, mas se algum colega discordar, poderia esclarecer pra gente qual é a maneira mais rápida de fazer um loop com registros de uma tabela.
Eu postei dúvida semelhante aqui.
[txt-size=3]
....também tenho este problema, so que no meu caso ele demora um pouco a conectar, mas depois disso ele é bem rápido...
... eu uso o iboldedb (ibfree) pra fazer a conexão...
um fator que agiliza na sua busca é a própria SQL... ..quanto menos valores ela retornar, mais rápido ela vai lançar o resultado.
Ao invés de usar "Select * From" utilize "Select Nome_tabela1, nome_tabela2 From"
à ¨ isso ai !!
Um Abraço !!
[/txt-size]
....também tenho este problema, so que no meu caso ele demora um pouco a conectar, mas depois disso ele é bem rápido...
... eu uso o iboldedb (ibfree) pra fazer a conexão...
um fator que agiliza na sua busca é a própria SQL... ..quanto menos valores ela retornar, mais rápido ela vai lançar o resultado.
Ao invés de usar "Select * From" utilize "Select Nome_tabela1, nome_tabela2 From"
à ¨ isso ai !!
Um Abraço !!
[/txt-size]
voce pode criar indices no firebird..
O firebird analisa a sua SQL e determina qual indice é mais indicado, dessa maneira ele consegue agir mais rapidamente.
Pra testar a sua SQL utilize o IBExpert e execute sua SQL nele, o IBExpert ira te mostrar o PLAN-TABLE, ou seja qual indice utilizou.
E se nao for rapido o bastante, crie stored-procedure, com certeza tera um alto desempenho.
E na select procure sempre especificar os campos que ira trazer, assim ele ganha desempenho.
O firebird analisa a sua SQL e determina qual indice é mais indicado, dessa maneira ele consegue agir mais rapidamente.
Pra testar a sua SQL utilize o IBExpert e execute sua SQL nele, o IBExpert ira te mostrar o PLAN-TABLE, ou seja qual indice utilizou.
E se nao for rapido o bastante, crie stored-procedure, com certeza tera um alto desempenho.
E na select procure sempre especificar os campos que ira trazer, assim ele ganha desempenho.
Tópico encerrado , respostas não são mais permitidas