首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 继续问 简单问题 [已结贴,结贴人:ysn1314]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ysn1314
    • 等级:
    发表于:2008-04-23 08:59:19 楼主
    最近突然对项目运行效率关注了 继续高分求答
    sql 查询
    1. t1 为用户表,t2为公司表 两者用userid关联
      1.1 SELECT * from t1 inner join t2 on t1.id=t2.userid
      1.2 SELECT * from t1,t2 where t1.id=t2.userid
    1.1 跟 1.2 查询结果应该是一样的,我自己测试是1速度比较快 不知道是不是?哪个速度比较快?
    这种查询还有没有更快的写法?有请写出来
    2. 使用order by 会影响查询速度?影响大不大?如果有影响的话排序怎么办?
    3. 存储过程写多了对数据库会不会有影响?如果一个存储过程可以搞定的,写成两个,比如通常添加跟修改数据,
      参数是一样的,可以用一个存储过程来完成,也可以分开写两个存储过程。哪种方式比较好?
    ASP.NET
    4. 我知道的数据绑定 可以绑定一个 DataSet,也可以先DataSet转成DataView再绑定。
      我知道DataView是用来过滤数据的,如果不过滤数据的话是不是直接绑定DataSet比较快?
      还有绑定完成后要不要GC一下?
    5. DataSet跟SqlDataReader 如果显示搜索结果给用户看,有分页。是不是用SqlDataReader比较好?
    6. 网上搜集资料说只读显示SqlDataReader比较好,但是说如果对数据进行操作的时候用DataSet比较好,什么样子才算对数据操作?
    7. 数据绑定 比如 DataSet绑定是这么写的:
      类中一个方法 public DataSet getDataSet(){...}
      CS文件中: Repeater1.DataSource = 类对象.getDataSet();Repeater1.DataBind();
      那换成SqlDataReader要怎么写?就是怎么绑定?返回什么对象,怎么接收?
    ==================================================================
    问题有点多,如果觉得分不够的话再加 回答越详细越好,因为近期想对项目重新整理下,所以要找比较优的写法
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ysn1314
    • 等级:
    发表于:2008-04-23 09:14:441楼 得分:0
    补充一个问题:SQL查询中大小写有没有影响?比如表中字段 Title 查询时用 title 返回title列
              asp.net 显示时 又用 TITLE 这样有没有速度方面的影响?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:19:512楼 得分:20
    1.1 SELECT * from t1 inner join t2 on t1.id=t2.userid
    这种连接的速度快,再快的就是添加索引了,将 *换成选择的字段,这好想不是实际的改进了

    2.order会影响了,排序的话加索引

    3.分开写好些

    4.直接绑定DataSet,要GC

    5.有分页,SqlDataReader,只读的话,他快些

    6.增删改

    7.普通的sql语句,DataReader或者返回跟你的要的类型也可以啊,比如写函数的时候,return.

    说的错的还请间见凉
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:20:163楼 得分:10
    sql查询
    1 不知道,你查查书.
    2.使用order by 会影响一点速度.看你怎么用了.没必要可以不用.
    3.一个存储过程可以搞定就不要写2个,因为存储过程执行前肯定有一部分初始化和寻址过程.写2个开销大.
    ASP.Net
    4.老实说我没怎么用过DataView和DataSet.自己写容器比较快.(执行效率方面)
    5.DataSet是比较慢的大型数据结构.DataReader应该是轻型的.哪个好看你实际需要了.
    6.DataReader好象是不能直接修改.我一般也是用来读数据,但总的来说2个我都用得不多.自己写数据结构更好用.
    7.你去看看DataReader的用法吧,好象是直接返回一个值.Whlie(dr.read()){dr.getstring(0)};
    ------------------------------------------------------------------------------------
    你的问题大多数都是基础问题,关键是要在意你的数据的存储和传输的实质,而不是形式.不是去在意怎么写,基础牢固才是关键.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:23:264楼 得分:5
    up~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:23:325楼 得分:20
    以下是我个人的观点

    1 基本上差不多,确实是1快了一点点
    2 除了这个我是不知道还有什么排序方法了,速度吗不会影响什么
    3 如果一个能搞定的话就没有必要写2个,方便修改,除非你那2个存储过程有一个是公用的,写成2个的的基本的执行语句
    也是一样的,只是浪费。
    4 DataSet比DataView大很多,还是DataView要快
    5 如果你用的是存储过程只查找分页结果的话用SqlDataReader可以,其他情况还是用DataSet吧
    6 SqlDataReader是只向下的读取,DataSet是有内存表的,方便修改操作
    7
    C# code
    SqlConnection con = DB.createCon(); con.Open(); SqlCommand cmd = new SqlCommand("select ProductTypeId from tbMapProductTypeInfo where ProductTypeFatherId="+ProductTypeId,con); SqlDataReader sdr = cmd.ExecuteReader(); Repeater1.DataSource = sdr;

    C# code
    SqlDataReader sdr = cmd.ExecuteReader(); Repeater1.DataSource = sdr; //以上这2句可以写成一句的不用SqlDataReader就可以 Repeater1.DataSource = cmd.ExecuteReader(); //使用SqlDataReader 是为了一些操作,下面是我一个小例子 int i=0; //计数器 string ProductMsgProperty=Request.QueryString["ProductMsgProperty"];//产品信息特性,0普通,1供应,2求购 string ProductTypeId=Request.QueryString["ProductTypeId"]; //产品类别ID // ProductTypeId="2"; //将点击类的下级类邦定到TABLE中 SqlConnection con = DB.createCon(); con.Open(); SqlCommand cmd = new SqlCommand("select ProductTypeId from tbMapProductTypeInfo where ProductTypeFatherId="+ProductTypeId,con); SqlDataReader sdr = cmd.ExecuteReader(); Repeater1.DataSource = sdr; TableRow tr = new TableRow(); while(sdr.Read()) { i+=1; TableCell tc =new TableCell(); type tp =(type)this.LoadControl("type.ascx"); tp.PRODUCTTYPEID=(sdr.GetInt32(0)).ToString(); tc.Controls.Add(tp); tr.Controls.Add(tc); if(i%this.rowNum==0) { this.Table2.Rows.Add(tr); tr= new TableRow(); } } if(i%this.rowNum!=0) { this.Table2.Rows.Add(tr); } con.Close();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:34:376楼 得分:10
    1. 第一种写法是SqlServer专用的,第二种写法是通用的写法,理论上不应该有效率差的,如果有可能是你用的Sql2005,而MS可能做了某些优化

    2. order by 会影响速度,有时候大部分效能都是因为 order by 的原因,所以通常会取有索引的字段做 order by ,
    没有索引的字段要order by建议根据需要加,毕竟索引多了会影响insert update的效率

    3.执行两个存储过程当然没有执行一个快了,因为找存储过程也是需要时间的,当然这个时间其实可以忽略不计,写成两个应该方便管理了,如何取舍还是自己决定了,建议分开

    4.DataView只是张视图,不会多占内存的,如果有需要在程序中过滤还是要用DataView的

    5.用SqlDataReader比较好

    6.对数据操作就是有insert update delete ,没操作就是只有select

    7.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 09:58:087楼 得分:20
    1. t1 为用户表,t2为公司表 两者用userid关联
      1.1 SELECT * from t1 inner join t2 on t1.id=t2.userid
      1.2 SELECT * from t1,t2 where t1.id=t2.userid
    1.1 跟 1.2 查询结果应该是一样的,我自己测试是1速度比较快 不知道是不是?哪个速度比较快?
    这种查询还有没有更快的写法?有请写出来
    个人推荐用inner join,特别是多表关联的时候,还有最好不要用select *

    2. 使用order by 会影响查询速度?影响大不大?如果有影响的话排序怎么办?
    会影响速度,最好对order by 的字段建立索引

    3. 存储过程写多了对数据库会不会有影响?如果一个存储过程可以搞定的,写成两个,比如通常添加跟修改数据,
      参数是一样的,可以用一个存储过程来完成,也可以分开写两个存储过程。哪种方式比较好?
    按理来说预编译的效率会高些,但是最好不要用存储过程来处理业务,后期维护成本会比较高,简单的说:存储过程用来处理数据,而不是用来处理业务.

    ASP.NET
    4. 我知道的数据绑定 可以绑定一个 DataSet,也可以先DataSet转成DataView再绑定。
      我知道DataView是用来过滤数据的,如果不过滤数据的话是不是直接绑定DataSet比较快?
      还有绑定完成后要不要GC一下?
    不光可以绑定DataSet,DataView等,还可以绑定别的.lz可以查下msdn,GC个人感觉没有必要.这两个感觉速度差不多,不过过滤的话DataView是在本地过虑,有时候还是很好用的.

    5. DataSet跟SqlDataReader 如果显示搜索结果给用户看,有分页。是不是用SqlDataReader比较好?
    分页的时候可以用DataSet,分页速度快与不快取决于你怎么取数据,而不是你用什么东西

    6. 网上搜集资料说只读显示SqlDataReader比较好,但是说如果对数据进行操作的时候用DataSet比较好,什么样子才算对数据操作?
    datareader和dataset一个是一直保持连接.一个是可断开式连接,知道这两个的区别了.在用的时候就看具体情况了

    7. 数据绑定 比如 DataSet绑定是这么写的:
      类中一个方法 public DataSet getDataSet(){...}
      CS文件中: Repeater1.DataSource = 类对象.getDataSet();Repeater1.DataBind();
      那换成SqlDataReader要怎么写?就是怎么绑定?返回什么对象,怎么接收?
    reader的话要转一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 10:09:588楼 得分:10
    t1 为用户表,t2为公司表 两者用userid关联
      1.1 SELECT * from t1 inner join t2 on t1.id=t2.userid


    我赶紧在 t1表加 公司表的id 比楼主的设计更好

    那样会少很多冗余数据
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ysn1314
    • 等级:
    发表于:2008-04-23 11:25:479楼 得分:0
    继续关注。。
    回3楼,就是基础不牢固所以才对这些基础的东西感觉迷糊啊。
    回8楼,数据库不是我设计的,所以不好说什么。反正是一对一,不是一对多,还好一点吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-23 16:25:3410楼 得分:5
    占个位置 看看
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved