sq语句优化l事项

1.1  性能优化推荐
1.1.1  采用 Select count(1) 获取数据量。
1.1.2  避免使用IN,建议采用EXIST 进行多数据条件检索
1.1.3  对数据唯一行无要求时,尽量避免使用DISTINCT 语句
1.1.4  如需要有限的记录,通过TOP N代替SET ROWCOUNT来控制排序取值
1.1.5  尽量避免在GROUP BY中使用HAVING 语句
1.1.6  GROUP BY的语句要尽量简单,不要进行GROUP BY语句的嵌套,避免在GROUP BY中包含多余的列
1.1.7  如果WHERE条件语句有多个AND条件,尽量加入带有索引列,如果没有可以建立多列复合INDEX
1.1.8  对唯一性无要求时,避免使用UNION,而是用UNION ALL 。
1.1.9  为了提高性能,应优先使用连接,然后使用子查询或嵌套查询,表之间的连接使用INNER JOIN,LEFT JOIN 和RIGHT JOIN,不使用CROSS

JOIN和多列表方式(有特殊要求除外)
1.1.10  多表关联避免超过5个,可以通过临时表(表变量),简化复杂的关联
1.1.11  应用程序中,对于需要用多语句才能完成的操作必须通过存储过程的方式实现;避免在应用程序中创建临时表
1.1.12  视图中连接表的数量不能超过8个
1.1.13  视图增加连接表时,必须在设计文档里说明,且经过视图创建者确认通过。不得随意增加连接表,以免影响其他系统程序的运行效率
1.1.14  在一张表中可以完成的查询、更新、删除等操作,避免使用视图
1.1.15  反复关联同一张表查询数据时,效率较低。新建临时表,把反复关联的数据,更新到临时表后再关联。
反例:
SELECT a.duty_userid,b.empCname AS duty_name,c.empCname AS chk_name ,e.empCname AS app_name
FROM ord2_klsz_so_master a
JOIN empGeneral b ON a.duty_user=b.userid
JOIN empGeneral c ON a.user_id=c.userid
JOIN empGeneral d ON a.app_user_id=d.userid
WHERE ....
正例:
CREATE #tmpDutyEmp
(duty_user_id varchar(30),duty_name varchar(30),chk_user_id varchar(30),chk_user_name varchar(30),app_user_id varchar

(30),app_user_name varchar(30))
INSERT INTO #tmpDutyEmp(duty_userid,duty_name)
SELECT duty_userid ,duty_name
FROM ord2_klsz_so_master a
JOIN empGeneral b ON a.duty_userid=b.userid
...
UPDATE
SET chk_user_name =b.empCname
FROM #tmpDutyEmp a
JOIN empGeneral b ON a.chk_user_id=b.empCname
...
1.1.16  尽量避免关联子查询,当子查询为大数据量的表时,效率极低。应先把查询的数据,写入临时表,再用临时表关联。
反例:
SELECT order_code,...
FROM ord2_klsz_so_master a
JOIN (SELECT order_code FROM ord2_klsz_so_detail WHERE item_model=’KLQ6100’)
正例:
CREATE #tmp_order_detail(order_code....)
SELECT order_code,...
FROM ord2_klsz_so_master a
JOIN #tmp_order_detail b ON a.order_code=b.order_code
WHERE ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值