全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1903
推到 Plurk!
推到 Facebook!

二秒鐘逼死英雄好漢mysql+delphi

 
gogocat
一般會員


發表:1
回覆:5
積分:1
註冊:2002-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-05-04 09:22:25 IP:203.204.xxx.xxx 未訂閱
因為公司需要寫一個檢查序號的程式,但機器會放在別人家公司 所以需要用不用錢的資料庫,但我用mysql delphi odbc在做connect 和insert時老是需要二秒的時間才能完成..明明是非常簡單的 東東,卻讓我手忙腳亂,想要換interbase 6.0 open source version 卻不會用,各位大大救命啊 我們的資料量最大大約在四十萬筆左右每一次序號key進來都要 檢查是否有重復如果有就錯誤,如果沒有就insert請問各位大大 要如果解決 發表人 - gogocat 於 2002/05/04 09:25:46
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-05-04 09:55:20 IP:61.70.xxx.xxx 未訂閱
40萬筆資料 Insert 須兩秒鐘算慢嗎? (我個人覺得還好) 資料庫系統本身因須考慮檔案資料的安全及完整所以一定會比檔案系統慢。 ~~~~~~~~~~~~~~~~ 有夢想最美......
------
~~~~~~~~~~~~~~~~
有夢想最美......
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-05-04 11:01:04 IP:61.219.xxx.xxx 未訂閱
引言: 40萬筆資料 Insert 須兩秒鐘算慢嗎? (我個人覺得還好)
我覺得太慢,以我做過的測試報告,ORACLE在資料量有20萬筆時一秒鐘可insert 600筆,MS-SQL約220筆,我想MY-SQL應該至少要有100筆的速度才對,怎會花到2秒! 除非您Insert的資料中,欄位太多,比如有100個以上欄位的Table, 用Oracle insert時確實要超過一秒以上! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
gogocat
一般會員


發表:1
回覆:5
積分:1
註冊:2002-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-05-04 11:06:39 IP:61.218.xxx.xxx 未訂閱
我要insert的欄位只有二個,用windows200 mysql odbc delphi6 ado 我的原碼是: ADOCommand1.CommandText:='INSERT INTO everok VALUES(:g,:h)'; ADOCommand1.CommandType:=cmdText; ADOCommand1.Parameters.ParamByName('g').Value:=0; ADOCommand1.Parameters.ParamByName('h').Value:=codestr; ADOCommand1.Execute; 就只有這樣 而且我開起程式時connect時都要等十秒左右,第一次insert也要五秒 第二次才二秒...... 資料數才二三筆 發表人 - gogocat 於 2002/05/04 11:07:59
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-05-04 12:04:30 IP:61.219.xxx.xxx 未訂閱
引言: 我要insert的欄位只有二個,用windows200 mysql odbc delphi6 ado 我的原碼是: ADOCommand1.CommandText:='INSERT INTO everok VALUES(:g,:h)'; ADOCommand1.CommandType:=cmdText; ADOCommand1.Parameters.ParamByName('g').Value:=0; ADOCommand1.Parameters.ParamByName('h').Value:=codestr; ADOCommand1.Execute; 就只有這樣 而且我開起程式時connect時都要等十秒左右,第一次insert也要五秒 第二次才二秒...... 資料數才二三筆
我想到了,上次我採用ADO Delphi 6.0 Windows 2000連Access 資料筆數約2萬筆而已,用ADOTable或ADOQuery open資料表都要很久, 換回BDE的TQuery就"瞬間"open成功! 會不會是ADO元件的屬性沒有設好,ADO啟動了Cache,一Open就把40萬筆拉回Local中的Buffer,所以open要10秒,至於Insert會不會是先把資料寫在Local的Cahce中再寫回資料庫,再更新Local Cache的同步,所以第一次insert要5秒,第2次insert時可能因為Cache已部份存在Memory中所以才只要2秒! 您說有沒有可能??? 待我Try看看... ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-05-04 12:46:59 IP:61.219.xxx.xxx 未訂閱
測過了! Create table everok (g number,h char(10)    一秒鐘可以Insert 120筆左右,程式如下:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ADODB;    type
  TForm1 = class(TForm)
    ADOCommand1: TADOCommand;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    d:double;
    t1,t2:tdatetime;
begin       for i:=7000 to 400000 do
   begin
     t1:=now;
ADOCommand1.CommandText:='INSERT INTO everok VALUES(:g,:h)';
ADOCommand1.CommandType:=cmdText;
ADOCommand1.Parameters.ParamByName('g').Value:=i;
ADOCommand1.Parameters.ParamByName('h').Value:='a' inttostr(i);
ADOCommand1.Execute;
     t2:=now;
     d:=(t2-t1)*24*60*60;
    caption:=inttostr(i) ' ' format('%.5f',[d]);
    application.processmessages;
   end;    end;    end.    
當資料長大到20萬筆時,Connect open 約三秒,Insert 一筆只需1/120秒 想不懂為何您的程式會秒??? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
gogocat
一般會員


發表:1
回覆:5
積分:1
註冊:2002-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-05-04 13:49:32 IP:61.218.xxx.xxx 未訂閱
我把資料庫改成access時insert就沒問題了 但是我的資料量變成12萬筆時查詢的動作就變慢了 原碼如下: ADODataSet1.close; ADODataSet1.CommandText:='select * from everok'; ADODataSet1.CommandType:=cmdText; ADODataSet1.Filtered:=false; ADODataSet1.Filter:='tickno=' codestr; ADODataSet1.Filtered:=True; ADODataSet1.Open; 結果加insert下來還是二秒離四十萬筆還是粉遠啊....
gogocat
一般會員


發表:1
回覆:5
積分:1
註冊:2002-04-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-05-04 14:14:07 IP:61.218.xxx.xxx 未訂閱
深度論談裡的回應 你用ado還要過odbc 初始化會很慢 建議你用zeosdbo zeosdbo是什麼啊
jackie07
一般會員


發表:13
回覆:28
積分:7
註冊:2002-04-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-05-07 13:36:35 IP:61.220.xxx.xxx 未訂閱
mysql for windows 的版本,好像不是免費的!!
akai
一般會員


發表:27
回覆:22
積分:9
註冊:2003-03-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-06 12:17:10 IP:202.39.xxx.xxx 未訂閱
引言: mysql for windows 的版本,好像不是免費的!!
應該是免費的吧 我兩年前就開始用到現在 那時還是免費的
akai
一般會員


發表:27
回覆:22
積分:9
註冊:2003-03-30

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-06 12:22:06 IP:202.39.xxx.xxx 未訂閱
http://www.fichtner.net/delphi/mysql.delphi.phtml 有試過這東西嗎? 會不會比較快呢? 我只知道以往的經驗都是MySQL透過ODBC通常都會比較慢
orson
中階會員


發表:5
回覆:135
積分:58
註冊:2002-07-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-07 13:20:50 IP:211.74.xxx.xxx 未訂閱
引言:
引言: mysql for windows 的版本,好像不是免費的!!
應該是免費的吧 我兩年前就開始用到現在 那時還是免費的
對windows上的商業用途 從來都不是免費的 你可以仔細看一下版權宣告 還有 你的資料新增速度慢 是因為ADO->ODBC->MyODBC->MySQL lib 建議你改用zeosdbo 他是 直接 連MySQL Client library 快非常多 http://sourceforge.net/projects/zeoslib/
系統時間:2024-06-29 18:32:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!