喫茶XRAYトップページ

[スレッド全体
]

[6891] 時間短縮したいとお望みの貴兄に返信 削除
2013/4/22 (月) 15:45:11 Syake
貴方は一度に10行のレコードを読み込みますか?
1万行はあるけど10万行は無い?

そんな貴方にお勧めです。
TDBXReaderでデータをLoadしてみませんか。


10万行(DBX)
        FieldByNameで呼出し 約51秒
      Fieldsで呼出し      約43.7秒
1万行(DBX)
        FieldByNameで呼出し 約5.1秒
      Fieldsで呼出し      約4.4秒

これでも早いですか?


10万行(TDBXReader)
        Value['xxxx']で呼出し 約6秒   //フィールド名で呼出し
      Value[X]で呼出し      約3.5秒
1万行(DBX)
        Value['xxxx']で呼出し 約0.6秒    //フィールド名で呼出し
      Value[X]で呼出し      約0.34秒

これでも遅いですか?




[6899] Re:時間短縮したいとお望みの貴兄に返信 削除
2013/4/22 (月) 20:41:19 snail3
Syakeさんこんにちは

計測条件をもう少し詳しく教えていただけませんか。

そもそもTDBXReader自体を知らないじいさんですが
時間短縮したいと考えています。

私も色々と試す必要があって少し前に時間を計ってみました。

計測したDBは ORACLE と SQLite です。

10000件リード
SQLite 1回目  4Sec 2回目 10sec ←ローカルマシン
SQLite 1回目 17Sec 2回目 30sec ←ローカルマシンADO
Oracle 1回目 17Sec 2回目110sec ←サーバーADO接続

時間は参考程度で見てください。


計測に利用したSQL文
----------------------
SELECT MHIN_HINCD,MHIN_JITSUCD,MHIN_HINMEI
,MHIN_CLASSSHIWA,MSWA_MEISYOU
,MHIN_CLASSHIN,MHBU_MEISYOU
,MHIN_CLASSTAN,MHIN_TANICD,MHIN_IRISU
,MHIN_TANKA,MHIN_CTANKA,MHIN_CTANKMI,MHIN_CTANFEN,MHIN_CTANKYOU
,MHIN_CTANKRI,MHIN_TANKAGEN,MHIN_TANKAURI,MHIN_TANKAHYOU,MHIN_ZAIKANYN
,MHIN_GENZAIKANYN,MHIN_HACHUTEN,MHIN_HACHUSU,MHIN_HACHU,MHIN_HHINBAN
,MHIN_STANCD,MHIN_RRANK,MHIN_MRANK,MHIN_BIKOU,MHIN_PASS
,MHIN_HAISHIYMD,MHIN_HAISHIYMDK,MHIN_SOZAI,MHIN_IRO,MHIN_SYOUSAI
,MSEI_MNO,MSEI_SERIES,MSEI_KIHONKEI,MSEI_GEN,MSEI_TOUROKU
,MSEI_SHOUNIN,MSEI_HAIFU,MSEI_OVERSEA,MSEI_INTER,MSEI_OEM
,MSEI_MIC,MSEI_NANI1,MSEI_NANI2,MSEI_OMOTEA
,MSEI_DOUSUN,MSEI_SAO,MSEI_BIKOU
,MBD_WU,MBD_WL,MBD_L,MBD_HU,MBD_HL,MBD_HA
,MBD_HS,MBD_BIKOU
,MSB_TYPE,MSB_GEN,MSB_HABA0,MSB_HABA12,MSB_NAGASA
,MSB_ATSUMI,MSB_HABA,MSB_FUKASA,MSB_PITCH,MSB_FSU
,MSB_BIKOU
 FROM MHIN
 LEFT JOIN MSEI ON MHIN_HINCD = MSEI_HINCD
 LEFT JOIN MBD  ON MHIN_HINCD = MBD_HINCD
 LEFT JOIN MSB  ON MHIN_HINCD = MSB_HINCD
 LEFT JOIN MSWA ON MHIN_CLASSSHIWA = MSWA_CLASSSHIWA
 LEFT JOIN MHBU ON MHIN_CLASSHIN = MHBU_CLASSHIN
order by  MHIN_HINCD

実際の取り出しコーディング(SQLite)
----------------------------------
  WrkSQLIteTable.MoveFirst;
  while WrkSQLIteTable.EOF = False do          // UTF8Encode(
  begin
    WrkListItem  := KELV1.LVO.Items.Add;             // ←行追加
    Inc( WrkIdx1 );
    WrkListItem.Caption := IntToStr( WrkIdx1 );      // 行タイトル

    WrkStr := WrkSQLIteTable.FieldAsString[1];// .FieldByName[ 'MHIN_HINCD'];

    WrkStr := WrkSQLIteTable.FieldByName[ 'MHIN_HINCD'];
    WrkListItem.SubItems.Add( WrkStr );         // 1列目に値設定
    WrkStr := UTF8Decode( WrkSQLIteTable.FieldByName[ 'MHBU_MEISYOU'] );
    WrkListItem.SubItems.Add( WrkStr );         // 2列目に値設定
    WrkStr := UTF8Decode( WrkSQLIteTable.FieldByName[ 'MSWA_MEISYOU'] );
    WrkListItem.SubItems.Add( WrkStr );         // 3列目に値設定
    WrkStr := UTF8Decode( WrkSQLIteTable.FieldByName[ 'MHIN_HINMEI'] );
    WrkListItem.SubItems.Add( WrkStr );         // 4列目に値設定

    WrkSQLIteTable.Next;
  end;

ちなみに取り出したデータを ListView にセットしない↓の場合は
SQLite ローカルの場合 0.7秒/1万件でした

  while WrkSQLIteTable.EOF = False do          // UTF8Encode(
  begin
    WrkStr := WrkSQLIteTable.FieldByName[ 'MHIN_HINCD'];
    Inc( WrkIdx1 );
    WrkSQLIteTable.Next;
  end;



[6901] Re2:時間短縮したいとお望みの貴兄に返信 削除
2013/4/22 (月) 21:15:46 snail3
TDBXReader=DBX (dbExpress)ですか?



[6903] Re3:時間短縮したいとお望みの貴兄に返信 削除
2013/4/23 (火) 07:59:43 Syake
▼ snail3さん
> TDBXReader=DBX (dbExpress)ですか?
>

です。

[6905] Re4:時間短縮したいとお望みの貴兄に返信 削除
2013/4/23 (火) 10:18:31 snail3
▼ Syakeさん

> > TDBXReader=DBX (dbExpress)ですか?
> >
> です。


ということは DEKO さん情報によると

>Professional 版の場合、DBX を用いて リモート接続する事は禁止されています。
>接続可能 / 不可能に関らずライセンス上ダメという事です。


なので Professional 版の私は利用できない。(;_;)

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82