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;
|