空手一方客

收获了一种恬静的生活, 像一条波澜不惊的小河, 流过春夏 流过秋冬
个人资料
  • 博客访问:
正文

晖声晖色: 设计SQL的经验

(2009-03-26 22:16:17) 下一个

    SQL那么普遍,很多人都在用。晖声晖色的经验值得学习。
          谢谢他的无私奉献让大家分享


在应用系统开发初期,由于数据库的数据比较少体现不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库数据的增加,系统的响应速度就成为需要解决的最重要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍甚至更多,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。常见的编写高质量的SQL语句的原则如下。

  • 不要在SQL语句中使用系统默认的保留关键字;
  • 尽量用EXISTS和NOT EXISTS代替IN和NOT IN;
  • 尽量不用SELECT * FROM ... 而要写字段名SELECT field1,field2,...;
  • 在SQL查询中尽量使用索引列来加快查询速度;
  • ORDER BY语句决定了如何对返回的查询结果进行排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式;
  • 任何在where子句中使用is null或is not null的语句不允许使用索引,所以执行的效率较低;
     
  • 通配符(%)在搜寻词首出现,系统不使用索引,如此使用会降低查询速度。当通配符出现在字符串其他位置时,优化器就能利用索引;
  • 在海量数据的SQL查询语句中尽量少用格式转换;
  • 任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边;
  • IN、OR子句常会使用工作表,使索引失效。如果不产生大量重复值,可以考虑把子句拆开。拆开的子句中应该包含索引。
[ 打印 ]
阅读 ()评论 (2)
评论
deedee2kcn 回复 悄悄话 我也在自学SQL, 这些Tips在 by Paul Wilton & John Colby 中都有提到. 这是一本很好的SQL的入门书, 写得很好. 跟你分享一下.
多维倪用户 回复 悄悄话 那位能帮我察看一下现在多维博克能上否?我怀疑在那里被封了IP. 谢谢。

如果您能登陆多维博克,敬请剪贴我的这一信息到那里的鱼翔浅底博克的寓言《河狸》一文之后。
登录后才可评论.