WEB开发网
开发学院数据库MSSQL Server 如何应付表数据过大的查询问题?(如何尽量避免大表... 阅读

如何应付表数据过大的查询问题?(如何尽量避免大表关联)

 2009-01-15 10:19:28 来源:WEB开发网   
核心提示:一般来说,对于做B/S架构的朋友来说,更有机会遇到高并发的数据库访问情况,因为现在WEB的普及速度就像火箭升空,同时就会因为高访问量带来一系列性能问题,而数据库一直是用户与商人之间交流的重要平台.用户是没有耐心忍受一个查询需要用上10秒以上的,或者更少些,如何应付表数据过大的查询问题?(如何尽量避免大表关联),如果经常

一般来说,对于做B/S架构的朋友来说,更有机会遇到高并发的数据库访问情况,因为现在WEB的普及速度就像火箭升空,同时就会因为高访问量带来一系列性能问题,而数据库一直是用户与商人之间交流的重要平台.用户是没有耐心忍受一个查询需要用上10秒以上的,或者更少些,如果经常出现服务器死机或者是报查询超时,我想那将是失败的项目。做了几年的WEB工作,不才,一直没有遇到过大访问量或者是海量数据的情况.这里并不是说没有海量数据的项目就不是好项目,要看项目的应用场合.

最近做项目时,偶然得到了这个机会,在我工作过程中,本人发现的单表最大记录数高达9位数.像订单表什么的也有8位数.在查询订单的时候往往不能通过单表查询就能解决,还要和其它相关表进行关联查询.如此关联的表数据不大还好,一旦发生大表关联大表,在查询时就有可能出现慢长的等待。

主旨: 如何避免这种情况的发生呢?既然有了这样的数据,需求还是要实现,这里就我最近针对数据库的优化过程,我分两篇文章来说明下.

第一篇:如何尽量避免大表关联.

第二篇:对大表进行分区.

背景:有两张表:

1:订单表:记录用户订单的详细信息.order,其中有一个会员卡号字段cardNo,订单产生时间.

2:会员表:记录会员相关信息.member,一个会员有一个代理号:proxyID,代理下面有许多的会员卡:cardNo,它们共用一个代理号.

两表通过cardNo来相关联.

需求:查询一个用户或者某些用户某一时间段所有会员卡产生的订单情况.

实现SQL:

    select 字段 from order
  
      inner join member on
       order.cardNo=member.cardNo
        and member.proxyID in('a-01',代理号二)
  
         and 时间 between '20080101' and '20080131'

1 2 3  下一页

Tags:如何 应付 数据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接