就以SQL Server为例:
理解了SQL的理论基础——关系代数和关系理论,那么所有的查询语句将会像数学中的加减乘除一样简单明了。不会再觉得SQL的语法如何诡异(因为它与通常的编程语言有明显差别),不会再觉得子查询、DISTINCT、JOIN、GROUP BY如何绕人,也不会再干那种把SQL当一种编程语言把表当一种数据结构的吃力不讨好的事。
理解了SQL Server的数据类型,当你写下一个表达式时,你就能够知道SQLServer是怎么理解和处理这个表达式,而不会出现莫名的误会。同时,你也更能够随心所欲地将一个值转换为另一个你想要的结果。(其中datetime是一个大家经常会困扰的数据类型,参看该帖22楼。)
理解了SQL Server的字符编码和排序规则,varchar和nvarchar将能够更好地各司其职,你的字典里也将不再有“乱码”一词,只有字节、字符和编码规则的泾渭分明。(参看SQLServer中文处理)
理解了SQL特有的三值逻辑(Three-valued Logic, 3VL),NULL与NOT NULL将没有分别,不一不异。
理解了表和索引的存储机制,当你看到一个表,你可以透过SSMS的数据结果看到每一条记录每一个字段在磁盘里的排布,你可以知道一个CREATE INDEX将会增加多少的磁盘占用量,你也很容易明白怎么样的查询才能高效地使用索引,以及为何有时候查找索引还不如表扫描来得快。
理解了SQL Server的系统架构,当你按下F5执行一个语句时,你可以看到数据是如何在磁盘、内存、tempdb之间流转,也更容易明白为什么一个查询会慢,慢在哪里;你也能够事先料想到什么时候一个操作会让日志文件飞速膨胀,吃完你的磁盘空间。
理解了会话、事务和隔离级别,那么一个查询何时会等待、何时能读取、何时能修改,将一目了然。这是维护数据一致性和增强访问并发性的必备知识。
理解了SQL Server支持的动态语句,你可以更好地发挥它天使般的神奇功力,同时避免被它魔鬼的一面所伤及。
至于SQL Server的系统函数、系统过程、系统视图和命令,以及SSMS、sqlcmd、bcp、SSIS几种常用的工具,都是Hack SQL Server的必备技巧。翻翻联机丛书,了解了才能应用自如。
抓住本质,深入理解原理,一切表面问题都是浮云。
一点感慨。