代码改变世界

Linq2Sql VS SQL

2011-05-19 09:55  ozheric  阅读(403)  评论(1编辑  收藏  举报

  写博客的频率越来越小了,呵呵,主要是越来越忙。现在发现自己的博客有点像是“月经贴”了。

  最近学习了一下Sql Server2005后的新特性,主要是Sql语言和数据库性能的。知识储备还是那些经典的Sql语句,出来了Over,row_number,RANK,dense_rank,pivot,unpivot这些新功能,一直没有去学,去用,真是惭愧啊。

  然而我的题目确又是Linq2Sql VS SQL,why?主要是关于这两个方面的效率的问题。现在看来Linq2Sql真是一个好东西,C#中使用Linq2sql,终将转化成sql语句交给数据库执行,也就是说从绝对角度来讲,比直接使用sql语句是要慢的。但实际上,在具体实施过程中未必。由于linq2sql的转化是执行时加载的,因此,所做的转化会根据目标任务进行调整,生成非常好的SQL语句。这一点,在表达简单逻辑(CRUD)没有优势,但是涉及相对复杂一点操作的时候,这种调整就显得有意义了。怎么说呢?就好像linq2sql是一个专业的英语翻译,和直接能说英语的你比较,简单的表达沟通,通过翻译没有意义,但是,一旦情况复杂了,比如一大段的意思的交流,专业翻译所作出的表达或许更加“信、雅、达”(比如分页,我们通常会通过两次top的sql语句实现,而人家linq2sql的skip,take则翻译成row_number,这就是专业的好处,当然,如果你的sql很专业了除外。)通常,项目组中大多数人无法达到多专业的水平,因此,一个项目开发后运行起来,linq2sql并不比sql慢多少。

  使用linq2sql表达复杂逻辑的时候,更符合自己的写代码习惯,这是其一;其二,如果直接采用sql,那么会弄得sql拼凑复杂,到处是没有智能感知的字符串书写,容易出错;你说可以采取每次执行简单sql语句,在代码中组织调用来表达复杂逻辑,嗯,不错,但,这也带来了多次的数据往返,降低数据库性能。这说明linq2sql还是非常不错的,微软是个好人,呵呵。

  另外推荐几篇写的非常好的关于Sql的博客:

     sql查询入门:http://www.cnblogs.com/CareySon/category/233560.html

总结SQL Server窗口函数的简单使用

动态SQL开发基础和经验再总结