注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的 

 

 

查询时不要返回不需要的行、列 

 

 

在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。 

 

 

重建索引   DBCC   REINDEX   ,DBCC   INDEXDEFRAG,收缩数据和日志   DBCC   SHRINKDB,DBCC   SHRINKFILE.   设置自动收缩日志.对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。   在T-sql的写法上有很大的讲究,下面列出常见的要点:首先,DBMS处理查询计划的过程是这样的: 

        1、   查询语句的词法、语法检查         
        2、   将语句提交给DBMS的查询优化器 
        3、   优化器做代数优化和存取路径的优化 
        4、   由预编译模块生成查询规划 
        5、   然后在合适的时间提交给系统处理执行 
        6、   最后将执行结果返回给用户其次,看一下SQL   SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。 

 

分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层   Web   站点的处理需要。有关更多信息,参见设计联合数据库服务器。 

          a、在实现分区视图之前,必须先水平分区表 
          b、在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。 

 

Sql Server的常用时间格式查询和对应输出结果:
 
 SELECT CONVERT(VARCHAR(100), GETDATE(), 0)-- 10 17 2010  4:51PM SELECT CONVERT(VARCHAR(100), GETDATE(), 1)-- 10/17/10  
SELECT CONVERT(VARCHAR(100), GETDATE(), 8)-- 16:52:13 
SELECT CONVERT(VARCHAR(100), GETDATE(), 9)-- 10 17 2010  4:52:13:960PM  
 
 

  实现空值到实际值的转换 

 
SELECT TOP 10 Id, FirstName, COALESCE(LastName,'') AS LastName 
 FROM Person (NOLOCK)  
>> 后一天
 select DATEADD(day, 1, getdate())>>前一天
 select DATEADD(day, -1, getdate())>>本周星期一
 SELECT DATEADD(dd,(case @@datefirst when 7 then 2 else  2-@@datefirst end)-datepart(dw,getdate()),getdate())>>本周星期日
 SELECT DATEADD(dd,6+(case @@datefirst when 7 then 2 else  2-@@datefirst end)-datepart(dw,getdate()),getdate())>>上周星期日
 SELECT DATEADD(day,-(@@datefirst+datepart(weekday,getdate())-1)%7,getdate())>>格式化后的下周第一天
 SELECT convert(char(10),(dateadd(dd,6+(case @@datefirst when 7 then 2 else  2-@@datefirst end)-datepart(dw,getdate()-1),getdate())),120) >>本月第一天
 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()),  0)>>下月第一天
 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())+1,  0)>>本月最后一天
 SELECT DATEADD(dd, -1, DATEADD(mm, 1+ DATEDIFF(mm, 0,  getdate()), 0)) >> 本季度第一天
 SELECT  DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) >>本年第一天
 SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)  
     
 >>下一年第一天
 SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()+366),0) >>格式化时间
 SELECT CONVERT(CHAR(10),getdate(),120) 
 
select CONVERT(varchar(12) , getdate(), 111 )    2012/02/06

 select CONVERT(varchar(12) , getdate(), 112 )   20120206 
清除sqlserver2005日志
1.右键在清除日志的数据库,如“TestDB”,点击[新建查询(Q)]
 2.输入以下SQL语句,其中“TestDB”是数据库名称
      DUMP TRANSACTION TestDB WITH NO_LOG
 3.执行该SQL,成功后继续以下操作
 4.右键该数据库节点,点击[任务(T)] -> [收缩(S)] -> [文件(F)]
 5.在弹出的“收缩文件”对话框中,将“文件类型(T)”选为“日志”,将“收缩操作”选中“在释放未使用的空间前重新组织页(O)”
 6.在“将文件收缩到(K)”文本框中输入后面提示的最小大小的数值,点击[确定]即可。
计算机改名解决
 
 
从sys.sysservers 查看列 svrname 可以发现不是新的计算机名,问题就出在此处。
先用 sp_dropserver 删除服务器,语句:EXEC sp_dropserver'老计算机名'
再用 sp_addserver 添加新的服务器,语句:EXEC SP_ADDSERVER'新计算机名','LOCAL'
最后重启服务器