拾遗补零
这里介绍其他一些可帮助提高 sql 查询效率的常用技术。假设您将按区域对所有销售人员进行分组并将他们的销售额进行小计,但是您只想要那些数据库中标记为处于活动状态的销售人员。您可以按区域对销售人员分组,并使用 having 子句消除那些未处于活动状态的销售人员,也可以在 where 子句中执行此操作。在 where 子句中执行此操作会减少需要分组的行数,所以比在 having 子句中执行此操作效率更高。having 子句中基于行的条件的筛选会强制查询对那些在 where 子句中会被去除的数据进行分组。
另一个提高效率的技巧是使用 distinct 关键字查找数据行的单独报表,来代替使用 group by 子句。在这种情况下,使用 distinct 关键字的 sql 效率更高。请在需要计算聚合函数(sum、count、max 等)的情况下再使用 group by。另外,如果您的查询总是自己返回一个唯一的行,则不要使用 distinct 关键字。在这种情况下,distinct 关键字只会增加系统开销。
您已经看到了,有大量技术都可用于优化查询和实现特定的业务规则,技巧就是进行一些尝试,然后比较它们的性能。最重要的是要测试、测试、再测试。在此专栏的将来各期内容中,我将继续深入讲述 sql server 概念,包括数据库设计、好的索引实践以及 sql server 安全范例。