技术开发 频道

SQL“财富”背后的习惯

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

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

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

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

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

考虑联接优先顺序:
(
1)INNER JOIN
(
2)LEFT JOIN (注:RIGHT JOINLEFT JOIN 替代)
(
3)CROSS 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
相关文章