关于初学SQL的几个建议

feilniu 2010-09-29 05:12:56
加精
1. 先对表和SQL有个基本理解,再开始写SQL代码

虽说学习编程最好是边看边练,但由于SQL(面向集合的说明式语言)与常见的过程式编程语言在思维上有明显不同,所以学习SQL的一开始,最好先对表和SQL的查询有个基本理解(可参看如何学习SQL一帖,特别是第二部分),再开始写SQL代码。

如果没有基本理解就直接东拼西凑硬写代码:
1) 很容易把表理解成一个二维数组,从而习惯性地写出低效的循环处理,还会觉得为什么这个“数组”这么难用,连下标访问都不能。(提示:表是记录的集合)。
2) 一般的过程式编程语言,只要语法能通过,逻辑上问题一般不会太大;而写出语法上能通过的SQL语句,逻辑却可能差之毫厘谬之千里。(比如少写一个条件导致笛卡尔积)。盲人摸象式的学SQL,很容易被SQL各种“零散”的语法特性迷惑,觉得SQL好难学啊,而只要从关系的角度理解表,SQL简直就像说话一样简单。
3) 一般的过程式编程语言,出错了最多程序crash掉,终止调试、修改代码、重新运行即可;而SQL操作的都是数据库里的持久层数据,一个操作不当的错误运行,就可能导致数据破坏、数据丢失等灾难性后果。(提示:良好的SQL编码习惯,权限合理分配,勤做备份)。

2. 关于动态SQL、触发器、游标

这几种是DBMS为了满足某些特定需求而提供的功能。使用这些功能要付出难调试、难维护、低性能的代价。

千万不要因为它们看起来复杂就觉得很高深,更不要因为觉得使用这些复杂功能看起来很牛,就让它们在代码中频频出现。这些功能应该掌握,但要尽量避免使用。如果数据库设计合理,这些东西基本是可以避免使用的。

武侠片中有个规律:使用的武器越是复杂、神秘、骇人的角色,其武功越是一般。而绝顶高手往往一把片刀、一把扫帚甚至赤手空拳就能威震江湖。记住IT领域的KISS原则,简单的往往是最好的,正是此理。


3. 不要过早优化--争议点 大家讨论讨论

Knuth有句名言:“过早优化是万恶之源”(有兴趣可参看《Unix编程艺术》1.6.15节)。在SQL中支持这一观点的理由如下:
1) 新手常常会低估DBMS的处理能力,或者高估实际问题的规模(数据量)。
2) 即使需要优化,也要遵循科学的优化方法(简单来说是:建立基线、寻找瓶颈、优化、测试)。盲目优化效果往往适得其反,既增加系统复杂度又降低效率。


当然,在数据库设计和编码时,一些高性能的架构设计和编码习惯是需要的。但这需要对数据库查询优化技术有深入了解。学习SQL总要一步一步来。

4. 不要人云亦云,盲目相信一些传闻

SQL查询优化是个复杂问题,硬件配置、DBMS版本、表结构定义、索引、数据量、查询语句,都会影响查询性能。判断一个语句的性能,最好是自己尝试一下,观察执行计划和统计数据。而对于网上看到的论断,即使不能一一尝试,至少也要想一下为什么,而不是盲目相信。

在CSDN论坛上看到的流传甚广的传闻:
1) WHERE CHARINDEX('abc', ColumnName) > 0 比 WHERE ColumnName LIKE '%abc%' 性能好。
2) 用JOIN判断A表数据在/不在B表比 IN/NOT IN 和 EXISTS/NOT EXISTS 性能好。
很好奇这些传闻是怎么产生的。
...全文
50436 780 打赏 收藏 转发到动态 举报
写回复
用AI写文章
780 条回复
切换为时间正序
请发表友善的回复…
发表回复
WWWSM123 2013-06-24
  • 打赏
  • 举报
回复
初学者,好好学习,谢谢楼主分享
quwie 2013-06-24
  • 打赏
  • 举报
回复
感谢分享
腊月的萝波 2013-06-20
  • 打赏
  • 举报
回复
这是个很负责的贴子,顶起!
u010089563 2013-06-03
  • 打赏
  • 举报
回复
学习了,很爽。
我是谁- 2013-06-01
  • 打赏
  • 举报
回复
好,支持。。。。。
vcdata 2013-05-30
  • 打赏
  • 举报
回复
u010089563 2013-05-28
  • 打赏
  • 举报
回复
好东西就是要顶。
liwanping1105 2013-05-28
  • 打赏
  • 举报
回复
总结并分享,持之以恒的学习,这才是正道。
hitman1314 2013-05-27
  • 打赏
  • 举报
回复
楼主说的不错,谢谢分享。继续加油
junjunzp 2013-05-27
  • 打赏
  • 举报
回复
好贴 学习了 N久不过来了 最近重新用SQL
u010823663 2013-05-27
  • 打赏
  • 举报
回复
谢谢楼主,学习了
lfcorp 2013-05-26
  • 打赏
  • 举报
回复
学到了,非常好的帖子
齐岳 2013-05-25
  • 打赏
  • 举报
回复
写的很好,多多学习数据库语句的优化
chinajswxcxm 2013-05-25
  • 打赏
  • 举报
回复
非常受用,谢谢搂主。
zxm616958939 2013-05-22
  • 打赏
  • 举报
回复
只要是"feilniu"的文章我都爱读。
toiota 2013-05-18
  • 打赏
  • 举报
回复
好贴,必须顶,学习了!
lovely罗颖 2013-05-17
  • 打赏
  • 举报
回复
很有道理,值得一看
haha789peng 2013-05-14
  • 打赏
  • 举报
回复
看不太明白啊,可能是我太小白了
u010687317 2013-05-14
  • 打赏
  • 举报
回复
谢谢分享,学习学习
加载更多回复(760)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧