【问题标题】:How to achieve MySQL Clustered Index-Ordered Join Result如何实现 MySQL Clustered Index-Ordered Join Result
【发布时间】: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


【解决方案1】:

您正在寻找的是 STRIAGHT_JOIN。

如果你这样做:

SELECT * from table1 STRIAGHT_JOIN table2 using (id)

订单将被保留。

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2018-01-06
    • 2011-04-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多