Beyond the dream——飛雪飄寒

————磨難不過是人生鍵盤的回車。。。。。。
posts - 67, comments - 172, trackbacks - 21, articles - -1
  博客园 :: 首页 ::  :: 联系 :: 订阅 订阅 :: 管理

2008年2月28日

     摘要: 1、日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦 2、后悔是一种耗费精神的情绪.后悔是比损失更大的损失 ,比错误更大的错误.所以不要后悔 3、我不去想是否能够成功,既然选择了远方,便只顾风雨兼程 ; 我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影 4、我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以... 阅读全文

posted @ 2008-08-16 10:59 飛雪飄寒 阅读(84) | 评论 (5)编辑

     摘要: 本文对自己认为比较好的.net学习网站进行了整理,并对网站做了简单的介绍,现把其网站地址公布出来,希望对大家的学习有所帮助,也希望大家把自己认为比较好的网站分享出来,再次欢迎大家的补充!  阅读全文

posted @ 2008-08-14 23:01 飛雪飄寒 阅读(377) | 评论 (3)编辑

     摘要: 一、简单介绍using System.Xml;//初始化一个xml实例XmlDocument xml=new XmlDocument();//导入指定xml文件xml.Load(path);xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));//指定一个节点XmlNode root=xml.SelectSingleNode...   阅读全文

posted @ 2008-08-14 17:24 飛雪飄寒 阅读(712) | 评论 (4)编辑

       时间过的真快, 无意中发现今天是自己在博客园安家两周年的日子,于是总想写点东西来标记一下。

       在这两年当中,博客园见证了自己的成长历程。从最初朋友向自己推荐博客园并让自己成为了博客园的过客,那时自己往往只是在园子里浏览别人的文章,寻找自己所需要的信息;之后便有了在园子里安家的打算了,自从在园子里安家后,自己刚开始只是写点自己的生活锁事及心情随笔并且也不希望发表出去让别人看;接下来便慢慢对自己在工作当中觉得的比较实用的资料进行了总结,并发表出去希望能够给需要的人带来一些帮助。

       在这两年当中,发现自己的思想也有了改变,从当初只在园子里“摘菜”,转变为在园子里“种菜”,觉得人不要一味的去获取,有时候也应该想想如何去奉献。自己从园子里的高人中学到了不少知识,在此特别感谢dudu、天轰穿、李天平、鸟食轩等一大堆高人们,正是由于他们的奉献,才让自己能够花尽量少的时间,学到了尽量多的知识,相信博客园里许多朋友都会有同样的感慨吧!

       在接下来的日子里,自己将会再接再励,与博客园的朋友们一起共同进步!期待自己能够与园子里的朋友有更多的交流,相信博客园的明天会更加美好!

posted @ 2008-08-01 13:13 飛雪飄寒 阅读(469) | 评论 (1)编辑

     摘要: 在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结。   阅读全文

posted @ 2008-07-31 22:01 飛雪飄寒 阅读(255) | 评论 (1)编辑

     摘要: 今天在ZDNetChina中文社区看到一篇关于asp.net学习流程的文章,觉得写得挺不错的,于是收藏一下,相信自己每隔一段时间看一遍都会有不同的体会。  阅读全文

posted @ 2008-07-24 21:15 飛雪飄寒 阅读(132) | 评论 (0)编辑

     摘要: 在.net使用DotNetCharting控件生成报表统计图总结 文章中,不少朋友提出“每运行一次DotNetCharting页面,就会生成一个图片,这样图片不是越来越多吗?请问怎样自动删除DotNetCharting生成的图片呢”的问题,于是自己对asp.net删除文件夹里图片的问题进行了处理。  阅读全文

posted @ 2008-07-23 16:34 飛雪飄寒 阅读(251) | 评论 (3)编辑

     摘要: Server.MapPath的用法小结  阅读全文

posted @ 2008-07-23 16:19 飛雪飄寒 阅读(131) | 评论 (2)编辑

     摘要:

在 UML 2 中有二种基本的图范畴:结构图和行为图。每个 UML 图都属于这二个图范畴。结构图的目的是显示建模系统的静态结构。它们包括类,组件和(或)对象图。另一方面,行为图显示系统中的对象的动态行为,包括如对象的方法,协作和活动之类的内容。行为图的实例是活动图,用例图和序列图。

  阅读全文

posted @ 2008-07-21 23:15 飛雪飄寒 阅读(154) | 评论 (0)编辑

     摘要:

最近在做项目时要对数据进行统计分析,所以必须生成一些报表统计图(如柱形图、饼图、曲线图等),网上强烈推荐了使用DotNetCharting控件来实现,于是自己对DotNetCharting控件进行了简单的学习,下面先简单介绍一下DotNetCharting控件及其使用,更为复杂的多维统计图的实现可以参照官方网站的说明!

  阅读全文

posted @ 2008-07-18 11:37 飛雪飄寒 阅读(2160) | 评论 (44)编辑

     摘要: 在系统中经常需要进行时间日期选择(比如查询时间范围内的信息、填写日期等),使用时间日期选择控件不仅能提高效率,而且不会写错格式!现把自己在.net项目中经常使用的一款时间日期选择控件整理出来,希望对大家有所帮助!   阅读全文

posted @ 2008-07-17 17:37 飛雪飄寒 阅读(402) | 评论 (0)编辑

     摘要: 常用正则表达式总结  阅读全文

posted @ 2008-07-11 15:26 飛雪飄寒 阅读(194) | 评论 (1)编辑

     摘要: 本文从八个方面列出了具体的解决方法,如有不当之处望予指正,如有更好的思路,欢迎补充!  阅读全文

posted @ 2008-07-11 10:53 飛雪飄寒 阅读(1646) | 评论 (10)编辑

     摘要: 工作之余好好娱乐一下吧,无限竟技之完美停车,看看你能过几关?  阅读全文

posted @ 2008-07-02 12:57 飛雪飄寒 阅读(260) | 评论 (2)编辑

     摘要: 在做.NET项目时,经常会遇到要导出文件的问题,如将DataGrid中的数据导出到word、excel文件等。下面是自己写的一个.net导出文件操作类,现把代码贴出来,以供参考,如有不当之处望予指正!   阅读全文

posted @ 2008-06-24 16:52 飛雪飄寒 阅读(415) | 评论 (2)编辑

     摘要: 这几天在做项目时要对数据进行统计分析,所以必须生成一些统计图(如柱形图、饼图、曲线图等),于是我首先想到了微软的owc11控件,owc11控件是microsoft office 图表控件(owc10为ofiiceXP的组件、owc11为office2003的组件,组件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\owc11,帮助文件的路径为C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052),调用它可以生成三维图、柱状图、饼状图、趋势图和误差图等。
  阅读全文

posted @ 2008-06-19 22:43 飛雪飄寒 阅读(1595) | 评论 (9)编辑

     摘要: 本文主要对.net常用函数的功能及使用技巧进行了总结!  阅读全文

posted @ 2008-06-17 16:37 飛雪飄寒 阅读(342) | 评论 (0)编辑

     摘要: 在做.NET项目时,会经常遇到要导出文件的问题,如将DataGrid中的数据导出到excel、word文件等,经常使用的是Office中的OWC组件,这个组件提供的功能很强大,在一般的项目中都可以满足当前的需要.但是这个功能强大的组件使用起来却不是很方便,不但有版本的问题,而且代码量也相对比较大.现在简单介绍一下利用Respone对象和相关的IO实现导出excel/word等文件的方法。
  阅读全文

posted @ 2008-06-13 16:31 飛雪飄寒 阅读(513) | 评论 (7)编辑

     摘要: 主要介绍了datagrid多层表头及datagrid列动态统计功能的实现,希望能给大家带来帮助!  阅读全文

posted @ 2008-06-12 17:25 飛雪飄寒 阅读(285) | 评论 (0)编辑

     摘要: 60个经典的电脑使用技巧,肯定会给大家带来帮助的!  阅读全文

posted @ 2008-06-05 15:15 飛雪飄寒 阅读(327) | 评论 (3)编辑

        前几天在公司的一个项目中,用到了DataGrid的绑定及分页功能,比如有10页,当不在首页(如第2页)根据条件进行筛选并查不到结果时往往会出现“无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”的错误;之前在DataGrid自带的删除功能,并且实现分页时,每当删除一条记录后要退回到前一页时,也出现了“无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。”的错误。

        现本人将此错误的出现情况及解决方法进行了总结(个人方法仅供参与考,不当之处敬请指正),具体如下:    

情况一:
        当在DataGrid自带的删除功能,并且实现分页时,每当删除一条记录后要退回到前一页时
思路:
        当删除数据库中数据并在数据绑定之前,判断是否需要翻页,以纠正CurrentPageIndex的错误。
实现:
        在DataGrid_Delete方法中,添加如下代码:       
        //正常删除数据库中的数据             
        //判断
        if( DataGrid1.Items.Count == 1 && DataGrid1.CurrentPageIndex > 0 )
        {
                DataGrid1.CurrentPageIndex--;
        }
        
        //重新绑定数据
        BindGrid();

情况二:
        可能我们没有使用DataGrid内建的删除方式,可能通过CheckBox使得每次可以删除多条记录。
思路:
        其实思路差不多,只不过要获取一次一共删除多少记录,并保存于一个变量中,然后将DataGrid1.Items.Count和其比较,正如上面的“DataGrid1.Items.Count == 1”,这样就能判断是否需要翻页了。
实现:
        //获取删除记录的总数
        int count = 0;
        foreach( DataGridItem item in DataGrid1.Items )
        {
                if( item.ItemType == ListItemType.Item || item.ItemType  == ListItemType.AlternatingItem )
                {
                        CheckBox ckbox = item.FindControl(“CheckBox1“ ) as CheckBox;
                        if( ckbox != null && ckbox.Checked )
                                ++ count;
                }
        }

        //判断
        if( count == DataGrid1.Items.Count && DataGrid1.CurrentPageIndex > 0 )
        {
                -- DataGrid1.CurrentPageIndex;
        }
 
        //重新绑定数据
        BindGrid();

情况三:
        在我们的一个Page中,可能是根据某一条件进行筛选,然后再显示在DataGrid内。当DataGrid允许分页,也会出现类似的问题。即:当某一个条件筛选出的结果大于1页,并且我们浏览到第2,或更后面的页,然后我们改变筛选的参数,重新获取结果并填充DataGrid,那么该错误提示又将出现!

思路:
        在改变筛选条件,进行筛选之前,我们应该判断CurrentPageIndex是否为第一页,即CurrentPageIndex应该等于0。如果不是则将其设置为0。
实现:
        我们用一个DropDownList来实现筛选,在SelectedIndexChanged事件处理函数中,我们原来是这么写的:
private void lstProject_SelectedIndexChanged(object sender, System.EventArgs e)
{
       ShowData( lstProject.SelectedValue );
}
现在应该改为:
  private void lstProject_SelectedIndexChanged(object sender, System.EventArgs e)
  {
           if( viewAllWorkItem.CurrentPageIndex > 0 )
           {
                    viewAllWorkItem.CurrentPageIndex = 0;
           }

           ShowData( lstProject.SelectedValue );
  }

posted @ 2008-05-30 11:21 飛雪飄寒 阅读(265) | 评论 (0)编辑

现在从对ASP.NET页面的执行顺序开始,体会一下B/S结构的程序的特点,下图是ASP.NET页面的执行顺序说明:

  Page_Init(页面初始化引发的事件)——>Page_Load(加载页面时引发的事件)——>Control   Event(服务器控件引发的事件)——>Page_UnLoad(页面从内存中卸载时引发的事件)

  Page_Init和Page_UnLoad不常用,但是这里还是要说明一下。Page_Init和Page_Load事件区别在于,只有后者才能完全加载控件,绑定数据,虽然你可以在Page_Init中访问控件,但是其viewstate都不会被加载,所以此时控件中只拥有默认值。
  这里说到了viewstate,我们先来做一个大致的了解——其实在ASP.NET中有两个viewstate。一个是控件本身的,用来维护控件自己的一些状态,比如说某个空间有变色的功能,它的viewstate就维护这个功能,这个viewstate是不能被用户访问的。相信自己写过控件的朋友都会有这样的感觉,自己写控件当然也要用自己的一个viewstate来维护这个控件的状态;而另外一个viewstate,是用户使用的,这个viewstate和Session几乎一模一样,必须要先对其进行定义,才能使用。

  每当点击ASP.NET的Web网页上的Button、LinkButton或ImageButton等控件时,表单就会被发送到服务器上。如果某些控件的AutoPostBack属性被设置为true,那么当该控件的状态被改变后,也会使表单会发送回服务器。?(AutoPostBack属性,它只有两个bool值,true/false。如果这个属性被设置成false,那么点击后就不会立刻将变化传给服务器处理,也就不会有该控件的SelectedIndexChanged事件。)
  每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码(注意,是每次都会执行!)。
很显然把网页的初始化代码放在这里是最合适不过。我们经常会希望在每次加载网页时执行一些代码,如一些控件的数据绑定。
 当我们希望只有在网页第一次加载时执行另一些代码(基本上都是数据的默认绑定),甚至希望一些代码在除首次加载外的每次加载时执行。那么我们可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。

在ASP.NET应用程序中,如果需要在页面第一次显示时执行一些初始化操作,必须判断IsPostBack属性!

  在ASP.NET使用Page.IsPostback,那么就可以避免往返行程上的额外工作:如果处理服务器控件回发,通常需要在第一次请求页时执行代码,该代码不同于激发事件时用于往返行程的代码。如果检查?Page.IsPostBack?属性,则代码可按条件执行,具体取决于是否有对页的初始请求或对服务器控件事件的响应。这样做似乎很明显,但实际上可以忽略此项检查而不更改页的行为。该属性用的好坏,直接关系到你程序运行是否按照你最初的意愿,也关系到整个页面的效率。因为,如果每次都会给控件绑定数据,不管你是第一次访问,还是提交了数据以后,那么这个页面程序的效率可想而知。


一个B/S结构的页面每一次提交,它都会重新从头到尾执行一次。而C/S结构的程序就不会这样,这是和C/S结构的程序最大的区别!? 其实,得不到控件的数据,都是因为这个原因。

posted @ 2008-04-30 21:05 飛雪飄寒 阅读(227) | 评论 (3)编辑

     摘要: 一、 开发前的准备
1、 在装有Windows 2000或者Windows XP Professional的机器上安装.net Framework SDK、Visual Studio.Net、Visual Source Safe 6C。(如果用户操作系统是Windows .Net Server,则无须安装.Net Framework SDK,.Net Server自带的IIS 6已经完全包含了对.Net的支持)这些工具在Visual Studio.Net的安装盘上都可以找到。
2、 一台专门用于存放版本控制中心数据库的服务器。该服务器不需要安装.NET Framework SDK和VS.net,但是必须安装VSS 6C。我们称这台服务器为开发服务器DataCenter。
3、 一个主域控制器,将DataCenter服务器加入这个域,为每一个开发用户分配域帐号。这样所有小组成员可以通过登录到Window NT域来访问版本控制信息。
注意:Visual Studio 6所带的Visual Source Safe 6不支持.Net的一些文件格式。如果你安装了V  阅读全文

posted @ 2008-04-28 22:15 飛雪飄寒 阅读(238) | 评论 (0)编辑

  private void Page_Load(object sender, System.EventArgs e)
  {    
        
    //定制菜单 
    Button BtnAll=new Button ();
    BtnAll.CommandArgument ="所有栏目";
    BtnAll.Text ="所有栏目";
    BtnAll.Command +=new CommandEventHandler(this.OnButton);
    PHMenu.Controls.Add(BtnAll);       
    for (int i=0;i<dtItemName.Rows.Count;i++)
    {
     Button Btn=new Button ();
     Btn.CommandArgument =dtItemName.Rows[i]["ItemName"].ToString();
     Btn.Text =dtItemName.Rows[i]["ItemName"].ToString();
     Btn.Command +=new CommandEventHandler(this.OnButton);
     PHMenu.Controls.Add(Btn);     
    } 
 }
  public void OnButton(Object Sender, CommandEventArgs e)
  {
   this.InitItems(e.CommandArgument.ToString());   
  }

posted @ 2008-04-28 13:07 飛雪飄寒 阅读(172) | 评论 (0)编辑

      虽然看过很多遍,但隔上一段时间,重新拾起,又会有新的感悟。 

      放弃———把握的反面就是放弃,选择了一个机会,就等于放弃了其他所有的可能。

      失恋———爱情如果只是一个过程,那么正是这个年龄应当经历的。

      漂泊———漂泊不是一种不幸,而是一种资格。趁着没有家室拖累,趁着身体健康,此时不漂何时漂?

      时尚———不要追赶时尚。独立思考和个性生活更重要。

      评价———我们最不应该做出的牺牲就是因为别人的评价而改变自我,不要只遵从规矩做事,规矩还在创造之中,要根据自己的判断做每一件事,虽然这样会麻烦一点。

      幼稚———不要怕人说幼稚,这正说明你还年轻,充满活力。“成熟”是个吓人的词儿,也是个害人的词儿。那些庸人,绝不会有人说他们幼稚。

      失败———一个人起码要在感情上失恋一次,在事业上失败一次,在选择上失误一次,才能长大。失败来得越早越好,要是三四十岁后再经历失败,有些事很可能就来不及了。

      浅薄———其实那只能说明你的神经依旧非常敏锐,对哪怕非常微弱的刺激都会迅速做出反应。等你的感觉迟钝了,人们就会说你深沉了。

      失意———过分在乎失意的感受,不是拿命运的捉弄来捉弄自己,就是拿别人的错误来惩罚自己。

      薪水———在30岁之前,机会远比金钱重要,事业远比金钱重要,将来远比金钱重要。30岁之前干事业的首要目标绝不是挣钱,而是挣未来。

posted @ 2008-03-18 13:01 飛雪飄寒 阅读(257) | 评论 (1)编辑

     摘要: 本节主要总结了关于jsp乱码问题的解决方法  阅读全文

posted @ 2008-03-11 15:23 飛雪飄寒 阅读(762) | 评论 (0)编辑

     摘要: 本节主要总结了jsp连接各种类型数据库的表达方式  阅读全文

posted @ 2008-03-11 15:14 飛雪飄寒 阅读(693) | 评论 (0)编辑

     摘要: 本文主要总结了Tomcat部署发布JSP应用程序的三种方法
  阅读全文

posted @ 2008-03-11 15:08 飛雪飄寒 阅读(1004) | 评论 (0)编辑

     摘要: 本文主要总结了Tomcat部署发布JSP应用程序的三种方法
  阅读全文

posted @ 2008-03-11 13:39 飛雪飄寒 阅读(889) | 评论 (1)编辑

     摘要: 性能问题应该从系统设计时期开始考虑,并延续到系统的生命期终止之时。 具有可伸缩性的系统是指当系统的负载增加一倍,系统需要的资源也同样增加一倍。说起来简单,但在现实环境中确难以做到。由于管理并发用户的开销的增长、锁事务的增长、一致性读负载的增加、操作系统负载的增加、低效的SQL或索引设计导致的过高的I/O等等因素,会导致系统资源的消耗的增长远大于一倍。 破坏可伸缩性的因素: 1.低效的应用程序设计、... 阅读全文

posted @ 2008-02-29 13:04 飛雪飄寒 阅读(2562) | 评论 (4)编辑

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

    2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
       select id from t where num is null
       可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
       select id from t where num=0

    3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

    4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
       select id from t where num=10 or num=20
       可以这样查询:
       select id from t where num=10
       union all
       select id from t where num=20

    5.in 和 not in 也要慎用,否则会导致全表扫描,如:
       select id from t where num in(1,2,3)
       对于连续的数值,能用 between 就不要用 in 了:
       select id from t where num between 1 and 3

    6.下面的查询也将导致全表扫描:
       select id from t where name like '%abc%'
       若要提高效率,可以考虑全文检索。

    7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
       select id from t where num=@num
       可以改为强制查询使用索引:
       select id from t with(index(索引名)) where num=@num

    8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
       select id from t where num/2=100
       应改为: 
       select id from t where num=100*2

    9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
       select id from t where substring(name,1,3)='abc'--name以abc开头的id
       select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id
       应改为:
       select id from t where name like 'abc%'
       select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

    10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

    12.不要写一些没有意义的查询,如需要生成一个空表结构:
       select col1,col2 into #t from t where 1=0
       这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
       create table #t(...)

    13.很多时候用 exists 代替 in 是一个好的选择:
       select num from a where num in(select num from b)
       用下面的语句替换:
       select num from a where exists(select 1 from b where num=a.num)

    14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

    15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

    16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。

    17.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

    18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

    19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

    21.避免频繁创建和删除临时表,以减少系统表资源的消耗。

    22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。

    23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

    24.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

    25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

    26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

    27.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

    28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

    29.尽量避免大事务操作,提高系统并发能力。

    30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

    具体的SQL语句在很多情况下需要结合实际的应用情况来写,这里不作叙述。

posted @ 2008-02-28 12:13 飛雪飄寒 阅读(1869) | 评论 (16)编辑