技术开发 频道

DBA必备的SQL好习惯 带来一笔大财富

  八:多表连接的连接条件对索引的选择有着重要的意义,所以我们在写连接条件条件的时候需要特别注意。

  A、多表连接的时候,连接条件必须写全,宁可重复,不要缺漏。

  B、连接条件尽量使用聚集索引

  C、注意ON、WHERE和HAVING部分条件的区别

  ON是最先执行, WHERE次之,HAVING最后,因为ON是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,WHERE也应该比 HAVING快点的,因为它过滤数据后才进行SUM,在两个表联接时才用ON的,所以在一个表的时候,就剩下WHERE跟HAVING比较了

  1考虑联接优先顺序:

  2INNER JOIN

  3LEFT JOIN (注:RIGHT JOIN 用 LEFT JOIN 替代)

  4CROSS JOIN

  其它注意和了解的地方有:

  A、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数

  B、注意UNION和UNION ALL的区别。--允许重复数据用UNION ALL好

  C、注意使用DISTINCT,在没有必要时不要用

  D、TRUNCATE TABLE 与 DELETE 区别

  E、减少访问数据库的次数

  还有就是我们写存储过程,如果比较长的话,最后用标记符标开,因为这样可读性很好,即使语句写的不怎么样但是语句工整,C# 有region

  sql我比较喜欢用的就是

  --startof 查询在职人数 sql语句 --end of

  正式机器上我们一般不能随便调试程序,但是很多时候程序在我们本机上没问题,但是进正式系统就有问题,但是我们又不能随便在正式机器上操作,那么怎么办呢?我们可以用回滚来调试我们的存储过程或者是sql语句,从而排错。

  BEGIN TRAN UPDATE a SET 字段='' ROLLBACK

  作业存储过程我一般会加上下面这段,这样检查错误可以放在存储过程,如果执行错误回滚操作,但是如果程序里面已经有了事务回滚,那么存储过程就不要写事务了,这样会导致事务回滚嵌套降低执行效率,但是我们很多时候可以把检查放在存储过程里,这样有利于我们解读这个存储过程,和排错。

BEGIN TRANSACTION
--事务回滚开始
  --检查报错
  IF ( @@ERROR > 0 )
          
BEGIN
        
--回滚操作
                  ROLLBACK TRANSACTION
                
RAISERROR('删除工作报告错误', 16, 3)
                  
RETURN
        
END --结束事务
  COMMIT TRANSACTION

  好久没有写博文了,工作项目一个接一个,再加上公司人员流动,新人很多事情接不下来,加班成了家常便饭,仓促写下这些希望对大家有帮助,不对的也欢迎指点,交流互相提高。

  有错误的地方欢迎大家拍砖,希望交流和共享。

0
相关文章