相思资源网 Design By www.200059.com
将绝大部分的SQL查询改为存储过程,这样的操作毫无疑问可以提高部分性能。
凡是使用“select * from xxx”的操作一律具体到所需字段。
使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引。理由来自SQL Server联机帮助手册: “对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图。如果在查询中频繁地引用这类视图,可通过对视图创建唯一聚集索引来提高性能。对视图创建唯一聚集索引后,结果集将存储在数据库中,就像带有聚集索引的表一样。
对视图创建索引的另一个好处是:优化器可以在未直接在 FROM 子句中指定某一视图的查询中使用该视图的索引。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。”
凡是使用 "select count(*) from xxx" 或是"select count(id) from xxx”(此处id为主键)的查询,一律改为”select count(1) from xxx”,理论上采用*来做聚合值,SQL Server会自动寻觅最合适的字段以进行聚合,但这样仍然会占用系统开销,即使主键也没有1来得快。
对于多条件的组合查询,我们一般会写成”where ((@condition is null) or (condition=@condition))”形式的存储过程条件来进行查询,但这样的操作会因为”is null ”导致性能问题,反复实地检测后采用了”where 1 = 1 ”,然后根据条件“IF @condition IS NOT NULL SET @sqlText=@sqlText+' AND Condition=''' + @Condition +'''',最后 “exec sp_executesql @sqlText” 的方式,这样确实可带来明显的性能提升,分析应是”is null ”或”is not null”导致了索引失效,进行了全表扫描。
对使用row_number()函数的表建立合适的索引,必须要有最合适的索引才能避免重建索引时的全表row_number()运算带来的性能问题,而且索引的方向也很重要,比如时间类的索引用降序往往比升序性能高。
这个不是性能问题,但也很重要,在存储过程中应使用scope_identity()函数来获得最新的标量,而不是@@Identity这个全局变量,因为@@Identity会受到触发器的影响而失去正确值。
凡是使用“select * from xxx”的操作一律具体到所需字段。
使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引。理由来自SQL Server联机帮助手册: “对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图。如果在查询中频繁地引用这类视图,可通过对视图创建唯一聚集索引来提高性能。对视图创建唯一聚集索引后,结果集将存储在数据库中,就像带有聚集索引的表一样。
对视图创建索引的另一个好处是:优化器可以在未直接在 FROM 子句中指定某一视图的查询中使用该视图的索引。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。”
凡是使用 "select count(*) from xxx" 或是"select count(id) from xxx”(此处id为主键)的查询,一律改为”select count(1) from xxx”,理论上采用*来做聚合值,SQL Server会自动寻觅最合适的字段以进行聚合,但这样仍然会占用系统开销,即使主键也没有1来得快。
对于多条件的组合查询,我们一般会写成”where ((@condition is null) or (condition=@condition))”形式的存储过程条件来进行查询,但这样的操作会因为”is null ”导致性能问题,反复实地检测后采用了”where 1 = 1 ”,然后根据条件“IF @condition IS NOT NULL SET @sqlText=@sqlText+' AND Condition=''' + @Condition +'''',最后 “exec sp_executesql @sqlText” 的方式,这样确实可带来明显的性能提升,分析应是”is null ”或”is not null”导致了索引失效,进行了全表扫描。
对使用row_number()函数的表建立合适的索引,必须要有最合适的索引才能避免重建索引时的全表row_number()运算带来的性能问题,而且索引的方向也很重要,比如时间类的索引用降序往往比升序性能高。
这个不是性能问题,但也很重要,在存储过程中应使用scope_identity()函数来获得最新的标量,而不是@@Identity这个全局变量,因为@@Identity会受到触发器的影响而失去正确值。
标签:
SQL,数据库,性能问题
相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com
暂无一次SQL调优数据库性能问题后的过程(300W)的评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。