DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1160|回复: 0
打印 上一主题 下一主题

[待整理] SQL Server中需要避免的查询设计错误

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-26 21:57:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL Server常见的需要避免的查询设计错误:


1、如果你在构建数据模型的时候没有考虑到数据的访问方式,将会导致难以处理的查询。你可能会用到根本不必要的JOIN增加代码,损害性能。

假如你要纠正这个问题,可以考虑一下需要访问数据的查询。如果查询在这个处理阶段不是很清晰,那么将来在写代码的时候就会更困难。很有可能是数据库设计过于复杂,可以通过简化来改善查询的性能。

与此相关,如果你是个喜欢直观的人,那么就打印出数据模型,或者在你选择数据建模工具的时候查看一下在线的模型。这可以改善你的代码时间和精确性。

2、传统的说法是,对所有的数据库访问都使用基于集合的逻辑。一般来说,我同意这是最好的经验之一。当基于集合的逻辑是正确的选择的时候,却使用了指针,可能会对性能产生很大的损害。SQL Server的设计是使用基于集合的逻辑,并且在大多数处理中应该使用它。

事分两面,另一面就是指针的例子。在这种情况下,指针逻辑胜过基于集合的逻辑。从这个信息引申出来的结论就是,判断你要执行的处理的类型,选择最适合需要的技巧。

3、SQL Server 2005为你的查询提供了一整套新的机会。所以使用老的办法可能仍然会起作用,但是也是时候去考虑一下最新的选择了。TRY…CATCH错误处理方法是你最先应该使用在代码中的技巧之一。此外还要考虑的是对层次进行处理的时候,可以用到通用表压缩;最后一项考虑是扩展关系型数据库引擎的功能:通用语言运行时(CLR)。这三项技术都在极大程度上改变了你使用SQL Server工作的方式,而它们只是冰山一角。

4、检查你的代码,然后安排一个时间进行同样的查看,这是在部署代码之前必须要做的事情。检查你的代码,明确查询计划,是确保使用了合适的索引,并且查询会像你期望的那样运行的重要保障。

5、输入SELECT *语句,想着表永远不会改变,这是一个经典的查询设计错误。即使在最简单的解决方案中,表的改变也是不可避免的,你需要查看代码确保没有包含一个额外的字段。或者,更糟糕的是,你必须等待应用程序崩溃,然后修正这些问题。最好的实践方案只是在你的查询中包含进来你需要的那些字段,然后必要的话就修改它们。不要把你的时间浪费在四处冒烟的模式中彻查代码。

6、不幸的是,我见过的大多数代码都很少或者根本没有注释。所以进行更改是一件令人畏惧的任务,即使是对那些最初开发了这个应用程序的开发人员和/或数据库管理员。注释你的代码真的是一个快速并且不痛苦的过程,对于未来的开发人员以安全和省时的方式理解和修改代码来说,这是至关重要的。

7、很少有开发人员和数据库管理员会喜欢简单的测试,他们也不喜欢在发布代码到产品环境之前进行严格的测试。并且,开发环境通常在硬件和数据量上都达不到产品环境的规模。就是说,简单的查询在几百个或者甚至是几千个记录上都可以工作良好,但是在产品环境中就不是这样了。对于你的查询没有别的更好的准备办法了,只有在测试环境中对含有碎片的表中几百万条数据进行测试,以此来确保查询会按照你的期望运行。

8、输入SELECT语句,没有包含WHERE子句,期望中间层或者前端以比SQL Server更加有效的方式来处理得到的数据,这是个很糟糕的主意。SQL Server就是设计用来处理查询,并且将其执行得非常高效的。将大量的数据移动只会让被洪水包围的系统和网络陷入困境。一定要尽可能地过滤你的数据,避免对性能产生影响。

9、视图可以满足你简化复杂查询中的代码的需求。它们通常用来帮助有权利的用户查询数据库。不幸的是,太多的好事情也会严重影响性能。视图就是一个简单的SELECT语句,视图的SELECT语句必须在每次你输入SELECT语句的时候再次输入。限制视图的使用,防止它们查询其他视图。或者,构建一个存储过程来查询数据,并且传递给它需要的参数来满足应用程序或者用户的需求。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 00:35 , 耗时 0.086593 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表