where指定行所对应的条件。having指定组所对应的条件。通常情况下,将条件写在where字句中比写在having子句中执行速度更快。
通过where字句指定条件时,由于排序之前就对数据进行了过滤,所以能够减少排序的数据量。而having字句是在排序之后才对数据分组的,因此需要排序的数据量比where的要多。执行速度自然要慢。
另外,where字句的速度更快的一个原因是,可以对where字句指定条件所对应的列创建索引。这样也可以大幅提高处理速度。创建索引是一种非常普遍的提高数据库性能的方法。