27,579
社区成员
发帖
与我相关
我的任务
分享
没有必要时不要用DISTINCT和ORDER BY,这些动作可以改在客户端执行。它们增加了额外的开销。这同UNION和UNION ALL一样的道理。
一般在GROUP BY和HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:
select 的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。
这样Group By和Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快
CREATE INDEX au_id_ind ON [Pro] (name)
--再
Select distinct(ClsId) From [Pro] Where CONTAINS(Name , '锁')
--或
Select ClsId From [Pro] Where CONTAINS(Name , '锁') Group By ClsId