我需要运行一个查询,对结果进行分组并对其进行排序.当我使用以下查询时,我注意到结果是按字段排序的name:
SELECT name, count(name)
FROM contacts
GROUP BY name
HAVING count(name)>1
Run Code Online (Sandbox Code Playgroud)
最初我计划使用以下查询:
SELECT name, count(name)
FROM contacts
GROUP BY name
HAVING count(name)>1
ORDER BY name
Run Code Online (Sandbox Code Playgroud)
我担心订单会大大减慢运行时间.我是否可以依赖ms-access始终按我分组的字段排序,并消除顺序?
编辑:我尝试将其他表中的不同字段分组,并始终按分组字段排序.
我已经向其他SQL DBMS找到了这个问题的答案,但没有找到访问权限.
GROUP BY和ORDER BY一般的工作在为组GROUP BY或DISTINCT操作创建组时,数据库通常在排序和散列之间进行选择.如果他们确实选择排序,您可能会很幸运,并且在应用程序GROUP BY和实际结果集消耗之间排序是稳定的.但是在稍后的某些时候,这可能会破坏,因为数据库可能突然更喜欢无顺序散列算法来生成组.
在没有数据库的情况下,您应该依赖任何隐式排序行为.你应该总是使用显式ORDER BY.如果数据库足够复杂,添加显式ORDER BY子句将提示排序对于分组操作也更为理想,因为排序可以在查询执行管道中重复使用.
我尝试将其他表中的不同字段分组,并且始终按分组字段排序.
您是否详尽地尝试了所有可能表达的查询?你有没有试过:
JOINOUTER JOINJOIN(使用EXISTS或IN)JOIN(使用NOT EXISTS或NOT IN)DISTINCT+ GROUP BY(这肯定会破坏你的订购)UNION或者UNION ALL(无论如何都打败了这个论点)我打赌你没有.即使您尝试了上述所有内容,您是否可以确定上述内容没有非常特殊的配置,只是因为您在一些(许多)实验中观察到了这种行为?
你不能.
就MS Access而言,请考虑文档ORDER BY
备注
ORDER BY是可选的.但是,如果希望数据按排序顺序显示,则必须使用ORDER BY.
注意措辞."你必须使用ORDER BY".因此,MS Acces与其他数据库没有什么不同.
所以关于性能的问题是朝着错误的方向发展的.在这种情况下,您不能牺牲性能的正确性.通过使用索引更好地解决性能问题.
| 归档时间: |
|
| 查看次数: |
2287 次 |
| 最近记录: |