现在大概有100w条记录,分散在不同的数据表中,每张表大概几w数据,现在业务从每张表中取出最新的一条记录,发现速度非常慢,大致5s左右。而且开始服务后,然后界面就卡死。请问这个怎么解决呢?
代码如下:
#region 启动服务按钮
private void startservice_Click(object sender, EventArgs e)
{
this.Enabled = false; //服务启动后,按钮不可用
stopservice.Enabled = true; //停止按钮可用
dataOperation = new DataOperation();
sqlconn = dataOperation.getSqlConn();
sqlconn.Open();
dataOperation.DataImport(sqlconn); //将Access数据库数据导入到SQL Server
dataOperation.CheckException(sqlconn); //导入过程中,如有异常值,则添加报警日志记录到SQL Server
timer.Interval = 1000 * 20; //每隔5分钟进行一次数据导入
timer.Tick += new EventHandler(OnTimedEvent);
timer.Enabled = true;
timer.Start();
//thread = new Thread(new ThreadStart(threadService));
//thread.IsBackground = true; //作为后台线程
//thread.Start();
}
#endregion
#region 每隔一定时间间隔导入一批数据到SQL Server
private void OnTimedEvent(object source, EventArgs e)
{
dataOperation.DataImport(sqlconn); //将Access数据库数据导入到SQL Server
dataOperation.CheckException(sqlconn); //导入过程中,如有异常值,则添加报警日志记录到SQL Server
}
#endregion
------解决方案--------------------
--界面卡死,是CPU占100%了吧?用多线程技术写这段代码
--取最新一条数据,哪条算最新的?某个时间字段,还是表有自增列?不管是什么,给相应字段加索引即可。
------解决方案--------------------
你不应该在UI端中运行这段代码,顶多是UI端的按钮发出一个开始命令,然后由后台WINDOWS服务或JOB判断或接收这个命令进行处理,一切的处理都应该交给服务端及后台服务。多线程的方案仍然会占用你客户端的CPU,无法从根本上解决问题。
另外你的的数据库设计及需求貌似也不合理。
------解决方案--------------------
先在sqlserver优化好你的查询再考虑界面展示
------解决方案--------------------
每张表取最新的一条记录,就算100个表,也应该在几十毫秒完成呀
看你代码里还有导入。。是导入慢还是查询慢???