阿里云网站正规网站优化推广
文章目录
- access 数据库的一个优化实例
- 一.起因
- 二.优化
- 三.启示
access 数据库的一个优化实例
一.起因
由于access数据库安装容易,操作方便,深受数据量不大的用户欢迎.但数据操作方面,微软为了安全起见,对SQL语法进行了大量简化和修改.主要修改有以下几个方面:
1.一些复杂的标准SQL语法编写的数据操纵语句不能执行.
2.每次查询仅中能执行一个语句.
以上限制对大量插入数据的用户来说,执行效率大幅下降.最近开发的一个软件 ,以插入860行数据为例,如果一次插入一行数据,(当然还有准备数据时间),大约需要65秒.部分程序如下:
protected void Button2_Click(object sender, EventArgs e){DataView dv;DataRowView drv;string projectID; this.Label3.Text = "错误!请检查订单类别、商品类别、差异率等!";string s = Session["xmkS0"].ToString();this.SDSxmk.SelectCommand = s;dv =(DataView) this.SDSxmk.Select(DataSourceSelectArguments.Empty);if (dv != null){for (int i = 0; i < dv.Count; i++){if (sele(i)){drv = dv[i];projectID = drv["xmdm"].ToString();if (book(drv)){int n = i>>4;int k = (int)Session["P" + n.ToString()];k = k & (65535 ^ (1 << (i - n * 16)));Session["P" + n.ToString()] = k;updatexmkBookflag(projectID, true);}}}} //this.Label3.Text = "";}private void updatexmkBookflag(string projectID, bool b){string s0, s1, s2;s0 = SDSxmk.UpdateCommand;s1 = "update xmk set bookFlag={0} where xmdm='{1}'";s1 = string.Format(s1,b.ToString(), projectID);SDSxmk.UpdateCommand = s1;SDSxmk.Update();SDSxmk.UpdateCommand = s0;}
二.优化
1.由于一次只能执行一个查询语句,所以我就想起用事务来一次执行多个语句,试着进行优化,效果出人意料.
代码片段:
protected void Button2_Click(object sender, EventArgs e)//生成凭证 {DataView dv;DataRowView drv;string projectID;this.Label3.Text = "错误!请检查订单类别、商品类别、差异率等!";string s1 = "update xmk set bookFlag={0} where xmdm='{1}'";string s = Session["xmkS0"].ToString();string s0 = SDSxmk.UpdateCommand;this.SDSxmk.SelectCommand = s;dv = (DataView)this.SDSxmk.Select(DataSourceSelectArguments.Empty);if (dv != null){OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);OleDbCommand command = conn.CreateCommand();conn.Open();command.Transaction = conn.BeginTransaction();try{for (int i = 0; i < dv.Count; i++){if (sele(i)){drv = dv[i];projectID = drv["xmdm"].ToString();if (book(drv)){int n = i >> 4;int k = (int)Session["P" + n.ToString()];k = k & (65535 ^ (1 << (i - n * 16)));Session["P" + n.ToString()] = k;command.CommandText = string.Format(s1, true, projectID);command.ExecuteNonQuery();}}}command.Transaction.Commit();}catch (Exception ex){command.Transaction.Rollback();}conn.Close();}this.SDSxmk.SelectCommand = Session["xmkS0"].ToString(); ;this.GridView2.SetPageIndex(35);this.Label3.Text = "";}
三.启示
1.select 语句是执行效率极高的.凡是能在select 语句完成的查询,就不要用数据集,数据源等进行操作,能用复合select语句的,就使用复合语句.
2.能使用存储教程操作的,就用存储过程(在SQLserver中特别高效).
3.能使用多条插入的查询,就使用如(insert into xxx select ***);别在编程中,用数据集来操纵.效率下降10倍以上.
4.不能使用多条语句的情况下.就使用事务.效率一样很高.
5.两个表更新,使用update xxx inner left xxx on xxx=xxx set xxx=xxx,更高效.
6.总之,能使用一次连接,完成数据库增删改查的,就一次完成,最高效.对数据的不管多复杂的操作,直接用sql 语句完成就对了,千万别想着自己编程,再使用sql语句来更新,效率下降十倍以上.