第二篇SQLserver优化的误区

     开篇先看例子:下面是两个语句,哪个才是'健壮'的SQL语句呢

第二篇SQLserver优化的误区_第1张图片

      写代码,语句非常重要,好的写法会让SQL运行起来非常流畅,除了平时的积累,理解里面的关键要素非常重要。我们回到上面这个例子,两个语句想表达的意思是一样的,但对于SQL来说是截然不同的两句话。第一句EmailAddress这个列是完全不做运算的,SQL会利用索引去检索信息。而第二句,虽然使用的是比较肯定的=关联,但因为对列EmailAddress做了运算,SQL必须进行全表搜索才能得出结果,这就导致系统开销变大。正解是语句一,是不是非常意外。

      下面是结论:Where 或者join on的条件中条件语句中不要对有索引的字段使用运算,如果无法避免,保证数据量大的表的条件没有运算.我在跟同事们讲语法时也非常强调这点。

       误区二,范式。教科书中常常教我们要遵循范式,冗余在学院派中是禁止的。但真的是这样么?适度的冗余是非常重要的,这也是我诟病Dynamics的原因。举个例子,以售后服务系统为例,我们假设有四个主要的表客户档案、热线记录表,派工信息表、服务信息表。其中的电话、姓名、地址等信息每张表都会用到,如果信息只记录在客户档案中,其它表只和他们做主键关联的话,就非常容易锁表!需要大量的精力对付这些优化。笔者建议的方案是每张表都存这些信息。用空间换取时间,唯一需要处理的就是有时其它单据修改这些信息了需要对客户档案做UPDATE 而已。

        结论二:灵活的冗余,不要迷信书本,实际出发用空间换取时间。

        先写这么多吧,打个预告下篇讲挑选服务器。

你可能感兴趣的:(第二篇SQLserver优化的误区)