日期:2014-05-18  浏览次数:20698 次

SQL牛人指点指点
一直很重视Sql语句编写,也认真学习了一些,不过由于是菜鸟面对高深的Sql差的还很多,问一些困惑的问题:

 1.子查询和join在什么情况下各自优势是什么,看Sql Server很多都是把子查询转换为left join语句,很多同事都说left join好,但没有说清楚好在哪里? 有些子查询改成left join反而评估时占用cpu更高些,说什么哈希匹配?不懂,请大牛解惑。。。
详细说一些……或者给一些牛人博客链接(其实已经看了很多博客了……)!

 2.为什么有些企业规定不让用存储过程,难道仅仅怕维护吗?

 3.建表时,企业项目建表时哪些使用自增ID,哪些情况不使用自增。

 4.使用with as tab 这种临时保存的表好吗?

 5.有些表的逻辑复杂,像查询A表一些字段需要从其他表统计出来,那如果在A表中创建这些字段,更新的时候,多修改一些这个字段,省得以后查询了,,那种方式好,实时的从其他表中查询填充A表,还是每次相应的修改都更新A表的对应字段。。

大牛给小弟解惑,非常感谢!

------解决方案--------------------
join逻辑上是1.做笛卡尔积,2.过滤,3.添加外部行。cross join只做1,inner join 会做1,2.left join,right join 则1,2,3都做。
------解决方案--------------------
分布式系统一般会用guid类型的,小系统自己用用的可以用int自增的。
------解决方案--------------------
我觉得楼主应该去数据库开发版块去提问
------解决方案--------------------
http://blog.csdn.net/ws_hgo/article/details/7418063
------解决方案--------------------
1.子查询代码易懂,好维护,效率稍低;
2.可能与业务逻辑有关,也可能主管不喜欢;
3.仅仅表示表内唯一记录时使用自增ID,好处是可以直接做主键并且是聚集索引,大大加快处理效率;
4.能用表变量就尽量不使用临时表,临时表要与磁盘交互,I/O压力高;
5.这需要兼顾数据库设计规范和数据处理效率,往往不能两全其美,可根据具体业务选择,基本是:
(1)大数据量频繁操作,尽量减少连接操作(Join),可以考虑设置冗余字段
(2)小数据量复杂逻辑操作,尽量减少冗余字段,防止数据不一致