Скорость работы ADO и ADO.Net

Шайтан
Дата: 07.06.2005 17:18:57
Добавить запись в таблицу. Файл .mdb

'ADO.Net    
 For i = 1 To 50000
     cmd.CommandText = "INSERT INTO t ( ID ) SELECT " & i & " AS i;"
     cmd.ExecuteNonQuery()
 Next
'старый добрый ADO
For i = 1 To 50000
      rs.AddNew()
     rs("ID").Value = i
     rs.Update()
Next

Со старым добрым ADO это выполняется почти в 14 (четырнадцать раз!) быстрее.

И где собака порылась? :)
PS. К поиску по форуму просьба на отправлять. Не работает он у меня :(
Шайтан
Лиман Артём
Дата: 07.06.2005 17:29:12
.нет походу в скорости всегда отстает, в этом его изюминка)))
а для чего делать SELECT " & i & " AS i;? нельзя разве просто INSERT INTO t ( ID ) values ( " & i & ")"?


_______________________________________________________
Господи, сколько ещё не сделано... А сколько ещё предстоит не сделать...!
Картинка с другого сайта.
Шайтан
Дата: 07.06.2005 17:41:00
2Лиман Артём
можно и "... values (" & i & ")", только на скорость это не влияет.
"... SELECT 5 AS i" - именно так "рисует" Access, если создать запрос в конструкторе. Для чистоты эксперимента, так сказать, полностью и повторил :)
Шайтан
ЕвгенийВ
Дата: 07.06.2005 19:52:20
'ADO.Net    
 For i = 1 To 50000
     cmd.CommandText = "INSERT INTO t ( ID ) values i;"
     cmd.ExecuteNonQuery()
 Next
Sam Andrews
Дата: 08.06.2005 08:44:29
для чистоты опыта, надо бы СommandText формировать по нормальному, а не создавать 50000 раз новую строку...

с уважением...
Артем1
Дата: 08.06.2005 09:06:20
ADO.Net
 cmd.CommandText = "INSERT INTO t ( ID ) SELECT ? AS i;"
 OleDbParameter p = new OleDbParameter('par', OleDbType.Integer)
 For i = 1 To 50000
     p.Value = i
     cmd.ExecuteNonQuery()
 Next

А так?
Артем1
Дата: 08.06.2005 09:08:27
старый добрый ADO
Dim cmd as ADODB.Command
'коннект и т.п.
For i = 1 To 50000
  cmd.CommandText = "INSERT INTO t ( ID ) SELECT " & i & " AS i;"
  cmd.Execute
Next
Или так?
Шайтан
Дата: 08.06.2005 15:20:59
2Артем1
медленно и так, и эдак.
Короче, тормозит Jet на SQL операциях :(
Шайтан
ЛП
Дата: 09.06.2005 10:23:34
Шайтан
медленно и так, и эдак.
Короче, тормозит Jet на SQL операциях :(

Но-но!
Поаккуратнее с наездами на джет :)

Через рекордсеты записи добавлять получается быстрее и в случае использования например ADODB+MS SQL
Просто у Jet эта разница ощутимее (кстати, в любом варианте быстрее сиквела)
А если вместо ADODB.Recordset использовать DAO.Recordset - то еще на порядок ускорение получишь.

Так что не "тормозит Jet на SQL операциях", а "летает на прямом доступе"
Шайтан
Дата: 09.06.2005 17:50:09
2ЛП
ты забыл добавить в завершение своего поста
Я ПРАВ ИЛИ Я ПРАВ?!
Шайтан