二秒鐘逼死英雄好漢mysql+delphi |
|
gogocat
一般會員 ![]() ![]() 發表:1 回覆:5 積分:1 註冊:2002-04-16 發送簡訊給我 |
因為公司需要寫一個檢查序號的程式,但機器會放在別人家公司
所以需要用不用錢的資料庫,但我用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 發送簡訊給我 |
|
領航天使
站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 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 發送簡訊給我 |
我要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 發送簡訊給我 |
引言: 我要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 發送簡訊給我 |
測過了!
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 發送簡訊給我 |
我把資料庫改成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 發送簡訊給我 |
|
jackie07
一般會員 ![]() ![]() 發表:13 回覆:28 積分:7 註冊:2002-04-30 發送簡訊給我 |
|
akai
一般會員 ![]() ![]() 發表:27 回覆:22 積分:9 註冊:2003-03-30 發送簡訊給我 |
|
akai
一般會員 ![]() ![]() 發表:27 回覆:22 積分:9 註冊:2003-03-30 發送簡訊給我 |
|
orson
中階會員 ![]() ![]() ![]() 發表:5 回覆:135 積分:58 註冊:2002-07-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |