SQL Server查询设计:避免10个错误

2008-8-20    | |
打印本文章
RSS

导读:在这篇文章中,将会列出10个常见的需要避免的查询设计错误。阅读此文,确保你不会成为这些错误的受害者,考虑给出的建议,修改你的查询。

关键词:SQL Server 查询设计 SQL Server数据库 SQL Serve错误

正在加载数据... 【TechTarget中国原创】随着SQL Server数据库的填充和持续的数据增长,以及用户对于次秒级响应时间的期望,避免编写糟糕的查询就是至关重要的了。在这篇文章中,将会列出10个常见的需要避免的查询设计错误。阅读此文,确保你不会成为这些错误的受害者,考虑给出的建议,修改你的查询。

【TechTarget中国原创】随着SQL Server数据库的填充和持续的数据增长,以及用户对于次秒级响应时间的期望,避免编写糟糕的查询就是至关重要的了。在这篇文章中,将会列出10个常见的需要避免的查询设计错误。阅读此文,确保你不会成为这些错误的受害者,考虑给出的建议,修改你的查询。

  前十个列表

  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语句的时候再次输入。限制视图的使用,防止它们查询其他视图。或者,构建一个存储过程来查询数据,并且传递给它需要的参数来满足应用程序或者用户的需求。

  10、不,这不是我的代码……

  我们都犯错误,我们最后工作的那个系统应该是从我们在当前系统中获得的知识中获益。所以,记录你学到的东西,并且把它与你的团队共享,让集体受益。当你有机会的时候,回到先前的系统中,用你从那个项目中学到的知识改善它们。

  结论

  如果你在查询中犯了以上或者其他的错误,承认错误,努力去纠正它。说起来容易做起来难,但是纠正这些问题会让企业获益,并且对应用程序的名声有好处。看完了这篇文章,开始为你正在做或者以后要做的项目构建一个私人的代码指南吧。

查看全文
相关的白皮书
 
Oracle9i中,很多系统参数是动态的,那么我们如何修改这些值呢?要修改这些值,我们可以通过修改pfile内容,重起实例来实现。
 
本文主要介绍了几种超大型Oracle数据库应用系统的设计方法。
 
本部分介绍了系统硬盘的划分分配以及数据库的备份与恢复策略。
 
我是个Oracle数据库的初学者。我想使用Oracle复制功能。谁能帮我讲讲Oracle数据库复制的步骤?非常感谢。
 
在刚结束不久的2009的JavaOne会议上,甲骨文CEO埃里森透露了他与Sun产品组的秘密会谈,称鼓励OpenOffice开发组采用JavaFX去开发电子表格或字处理程序。
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录