愚者の経験

「また今度」はほとんどこない

Accessでaccdbを使わずに他のDBを使ってみる – SQLite編1

Accessと同じくファイルDBで、しかもAndroidなどにも広く使われている「SQLite」を
バックエンドに置きAccessのaccdbと比べて利点があるのかを調べてみます。

まず接続からいきます。

どうやら「SQLite」用のOLEDBプロバイダは本家で開発しておらず、サードパーティ製を使うしかないようです。ODBCドライバもサードパーティならあるようです。ここではOLEDBプロバイダを利用して実験します。

SQLite OLE DB Provider:http://cherrycitysoftware.com/ccs/providers/provsqlite.aspx

SQLiteのテーブル等を作成するために管理ツールも準備します。「tkSQLite」を使いました。
tkSQLite:http://reddog.s35.xrea.com/wiki/TkSQLite.html

早速実験してみます。以下のテーブルを使います。

[test1]テーブル

  • id integer 主キー インクリメント
  • int1 integer
  • int2 integer
  • int3 integer
  • int4 integer
  • int5 integer
  • text1 text
  • text2 text
  • text3 text
  • text4 text
  • text5 text

このテーブルに3万回Insertします。
実行方法はADODB.CommandオブジェクトでExecuteを3万回実行して速度を見ます。

“Insert into test1
(int1,int2,int3,int4,int5,text1,text2,text3,text4,text5)
values(1,2,3,4,5,’a’,’b’,’c’,’d’,’e’)”

Public Sub SQLiteTest()
    Dim i As Long
    Dim tm As Single

    With New ADODB.Command
        .ActiveConnection = _
            "Provider=OleSQLite.SQLiteSource.1;" & _
            "Data Source=C:\test.sqlite;"

        .CommandText = "insert into " & _
            "test1 (int1,int2,int3,int4,int5,text1,text2,text3,text4,text5) " & _
            "values (1,2,3,4,5,'a','b','c','d','e')"
        .CommandType = adCmdText
        .CommandTimeout = 0

        tm = Timer
        For i = 0 To 30000
            .Execute
        Next

        Debug.Print Timer - tm
    End With
End Sub

Public Sub accdbTest()
    Dim i As Long
    Dim tm As Single

    With New ADODB.Command
        .ActiveConnection = _
            "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" & _
            "Data Source=C:\test.accdb;"

        .CommandText = "insert into " & _
            "test1 (int1,int2,int3,int4,int5,text1,text2,text3,text4,text5) " & _
            "values (1,2,3,4,5,'a','b','c','d','e')"
        .CommandType = adCmdText
        .CommandTimeout = 0

        tm = Timer
        For i = 0 To 30000
            .Execute
        Next

        Debug.Print Timer - tm
    End With
End Sub

実行結果        SQLite :280秒         Access:18秒
SQLite遅い…これはプロバイダのせいなのかわかりませんが。
ファイルサイズ SQLite :1,171kb Access:2,436kb
同じ行数でもSQLiteのほうが断然ファイルサイズが小さいです。

広告

Accessでaccdbを使わずに他のDBを使ってみる – SQLite編1」への5件のフィードバック

  1. ピンバック:Accessでaccdbを使わずに他のDBを使ってみる – SQLite編2 « 愚者の経験

  2. ピンバック:MS Office Accessのサイズが2GBを超えてしまったときの対処法 | 俺的備忘録 〜なんかいろいろ〜

  3. ピンバック:MS Office Accessのサイズが2GBを超えてしまったときの対処法 | 俺的備忘録 〜なんかいろいろ〜

    • rsskkr 4月 28, 2014 12:09 pm

      俺的備忘録 ~なんかいろいろ~様
      初めまして、rsskkrです。ピンバックありがとうございます。
      稚拙なブログですがまたよろしくお願いします。

  4. ピンバック:Accessでaccdbを使わずに他のDBを使ってみる – SQLite編1 | 愚者の経験 | Com話題情報ポータルさいと

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。