第二篇SQLserver优化的误区

本文探讨了SQL语句的优化技巧,特别是如何避免在索引字段上使用运算,以减少系统的开销。此外,文章还讨论了适度的数据冗余在实际应用中的重要性,并提出了一种通过增加冗余来提高查询效率的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值