有没有一种方法可以由一个唯一的(主键)分组,本质上给出了一个隐式的保证,该表中的其他列将被很好地定义?GROUP BY唯一的主键,但选择其他值
SELECT myPrimaryKey, otherThing
FROM myTable
GROUP BY myPrimaryKey
我知道我可以在其他列加入到语句(GROUP BY myPrimaryKey,otherThing
),但我想避免这种情况。如果你好奇,为什么,请继续阅读:
我有这本质上是这样一种说法:工作正常
SELECT nodes.node_id, nodes.node_label, COUNT(1)
FROM {a couple of joined tables}
INNER JOIN nodes USING (node_id)
GROUP BY nodes.node_id, nodes.node_label
,但在MySQL有点慢。如果我从GROUP BY
中删除nodes.node_label
,则它的运行速度会快大约10倍(根据EXPLAIN
,这是因为之前的一个联接先前没有使用索引)。
我们在迁移到Postgres的过程中,因此所有新语句应该是与既的MySQL 和 Postgres的时候可能不兼容。现在在Postgres中,原始语句运行得很快,但新语句(使用减少的分组)将不会运行(因为Postgres更严格)。在这种情况下,这是一个错误的错误,因为该声明实际上是明确定义的。
是否有一种语法可以让我们在两个平台上运行相同的语句,同时让MySQL只用一列来提高速度?
'在这种情况下,这是一个虚假的错误,因为该声明实际上是很好defined.'不不不,MySQL的接受weirds GROUP BY的事情(带有不可预知的结果),所有其他DBMS都强迫您获得可预测的结果(通常很有用)。要找到解决方案,我宁愿开展索引管理,以避免MySql缓慢! –
@RaphaëlAlthaus通常这是真的,但通过主键(或任何'UNIQUE'键)进行分组可确保同一个表中的所有其他值都定义良好。 – Dave
但我怀疑它是如何工作的。我不认为查询扫描和解析检查主键/唯一键。 (查询优化/执行策略)... –