CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

sql server性能问题

楼主peaty(青春易老,亲情最真)2006-03-10 10:53:10 在 MS-SQL Server / 疑难问题 提问

select   top   1000    
  a.resume_id,  
  b.user_name,b.sex,datediff(yy,b.birthday,getdate())   age,  
  c.degree_name,b.work_year,  
  a.station,a.refresh_time    
  from   t_resume   a   --大表  
  ,t_person   b   --大表  
  ,c_degree   c   --小码表  
  where   a.person_id=b.person_id    
  and   b.degree_id*=c.degree_id    
  and   datediff(yy,b.birthday,getdate())>=18    
  and   datediff(yy,b.birthday,getdate())<=60    
  and   datediff(dd,a.refresh_time,getdate())<=30    
  and   (b.open_mode='1'   or    
  (b.open_mode='2'   and   not   exists    
  (select   *   from   t_blench_com_key    
  where   person_id=a.person_id   and   '某某科技有限公司'   like   '%'+com_keyword+'%')   ))    
  order   by   refresh_time   desc    
   
   
  t_resume   ,t_person   是几十万记录  
  t_resume_jobsort_exp   对应每个resume_id几条记录,带索引resume_id  
  t_person_area_exp   对应每个person_id几条记录,带索引person_id  
  t_blench_com_key   对应每个person_id几条记录,带索引person_id    
   
  帮我看一下sql有无问题,是否可以优化   :)    
   
  我现在测试起来   速度有点慢,现在的选择是   如果   实在有性能瓶颈,只能把t_person的主要字段   扔到   t_resume里,不过这样  
  就牺牲了结构的标准化...,可能会有数据冗余(目前还是1对1,以后可能一对多)    
  ------  
  上线后估计每天有十几万的pv量 问题点数:100、回复次数:3Top

1 楼wudan8057(上善若水)回复于 2006-03-10 11:09:00 得分 50

最好有表结构、索引、部分测试数据Top

2 楼WangZWang(先来)回复于 2006-03-10 11:16:11 得分 50

select   top   1000   a.resume_id,b.user_name,b.sex,  
          datediff(yy,b.birthday,getdate())   age,c.degree_name,  
          b.work_year,a.station,a.refresh_time    
  from   t_resume   a   Inner   Join   t_person   b   on   a.person_id=b.person_id  
        left   Join   c_degree   c   on   b.degree_id=c.degree_id    
  where   (datediff(yy,b.birthday,getdate())   between   18   and   60)   and  
              (datediff(dd,a.refresh_time,getdate())<=30)   and  
              ((b.open_mode='1')   or   (b.open_mode='2'   and   not   exists    
    (select   1   from   t_blench_com_key    
      where   person_id=a.person_id   and   '某某科技有限公司'   like   '%'+com_keyword+'%')))  
  order   by   a.refresh_time   desc    
   
  /*  
  在t_resume表的字段person_id,   refresh_time   建立索引  
  在t_person表的字段person_id,   degree_id,birthday,open_mode   建立索引  
  在c_degree   表的字段degree_id   建立索引  
  ......................  
  还可以用临时表来进行筛选后连接,具体要根据时间情况,  
  写完SQL请多看一下sql工具的‘查询计划’,一步一步来进行优化处理。  
  Top

3 楼peaty(青春易老,亲情最真)回复于 2006-03-14 19:39:10 得分 0

UUUUUUUUUUUUUUUUUUUUUUUUUUpTop

相关问题

  • SQL Server性能极限
  • SQL server和ORACAL的性能谁好些?????
  • ORACLE和SQL SERVER的性能问题
  • 请问高手,SQL Server的性能优化有哪些方法?
  • SQL Server 7 能在win98下用吗?性能如何?
  • 请教,SQL Server和Oracle的性能比较
  • 关于性能,ASP与SQL server,高手请指教!!急急!!
  • 问一个关于SQL SERVER性能的问题
  • sql server vs mysql 数据插入的性能问题
  • SQL Server的性能分析,急用,谢谢了,:D

关键词

  • degree
  • datediff
  • birthday
  • getdate
  • yy
  • resume
  • person
  • 大表

得分解答快速导航

  • 帖主:peaty
  • wudan8057
  • WangZWang

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo