高分求解數據庫操作過大的問題


private void Button3_Click(object sender, System.EventArgs e)
{
tring Conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("view.mdb")+";";
OleDbConnection myconn=new OleDbConnection(Conn);
myconn.Open();
string st="DELETE FROM produce WHERE 記錄編號 IN (SELECT MAX(記錄編號) FROM produce GROUP BY 物資名稱,數量,規格型號,下達時間,編號,單價 HAVING COUNT(記錄編號)>1)";
OleDbCommand cmd=new OleDbCommand(st,myconn);
cmd.CommandTimeout=0;
cmd.ExecuteNonQuery();
Response.Write("<script language='javascript'>alert('OK!');<"+"/"+"script>");
myconn.Close();
}
代碼如上,用來刪除數據庫中可能存在的重復數據,其中"記錄編號"為自動序號.正確編譯通過,數據庫中有好幾萬條記錄,所以執行起來非常緩慢,有朋友說等個10多分鍾估計才可以,但是大概在5分鍾左右頁面沒完全打開就出現"無頁面顯示,HTTP出現錯誤了".請問如何讓頁面一直不超時呢?
還有我想3000條一次查詢應該怎么修改語句?
承情高手分析下那段SQL語句在內存中的大致執行情況,提供各種優化方案及頁面不超時方案,我查到一個Server.ScriptTimeout,但是不知道該放到哪個地方,分不夠再加!

15 个解决方案

#1


tring應該為string復制掉;額

#2


建立索引

#3


數據大了
用sql吧,SQL + 存儲過程 + 緩存 + 索引
應該很快的

#4


我暫時不會索引,公司催得急,我也只有這次過了慢慢改,那先請教下怎么頁面不超時方案?我查到一個Server.ScriptTimeout,但是不知道該放到哪個地方

#5


頂一下,高手該來了吧

#6


gz

#7


this.Server.ScriptTimeout?對不對?

#8


你看看把Sql語句運行在查詢分析器的時間,要多少,如果時間很長,應該要考慮優化

#9


用sql server數據庫
連接 不要使用OleDbConnection
應該
using System.Data.SqlClient;

SqlConnection conn=new SqlConnection(myconn);

SqlCommand cmd=new SqlCommand(st,myconn);

#10


this.Server.ScriptTimeout?各位,這樣使用對不對?

#11


那也太慢了。誰能忍受呀! 


 應該要考慮sql語句優化

  試試把in 改成 EXISTS ! 
 

#12


Server.ScriptTimeout = 600 //設為十分鍾

#13


應該說樓主的SQL語句寫的是很標准的。
你看看這樣行不!

"DELETE FROM produce WHERE 記錄編號 IN (SELECT MAX(記錄編號) FROM produce GROUP BY 物資名稱+數量+規格型號+下達時間+編號+單價 HAVING COUNT(記錄編號)>1)"

#14


每次找出最大的,多執行幾次,一直刪

#15


強烈摧薦用多線程,你在前太提供界面,后台執行刪除操作

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com