【发布时间】:2017-02-12 12:54:32
【问题描述】:
假设我有两个表,table1 有两个字段:id 和 cost,在 (cost, id) 上有一个聚集的主索引强>。另一个表,table2,只有 id,这是主键。
因此,table1 中的数据按成本排序 - 由于聚集索引。
如果我去:
Select * from table1 join table2 using (id)
结果并不总是按照 table1 中的聚集索引定义的顺序。在那种情况下,当将多个表连接到具有特定/复合聚集索引的表时,如何实现这种排序?
【问题讨论】:
-
请小心。 SQL 结果集排序是形式上不可预测的,除非您在查询中包含
ORDER BY子句。 形式上不可预测比随机更糟糕,因为它在测试中更难捕捉:结果集的顺序保持不变直到它没有。ORDER BY没有当您的索引订单匹配时,成本会很高。 -
要订购结果集,您必须使用
order by。如果您不使用order by,它将导致任意顺序 - 这可能是您当前希望的顺序,但根本不能保证,并且可能随时更改(例如,当 mysql 选择不同的执行时计划,这就是straight_join在这里产生的效果。)
标签: php mysql join clustered-index