【问题标题】:Are the order of rows in a MYSQL table fixed, so that queries always return them in that order?MYSQL 表中的行顺序是否固定,以便查询始终按该顺序返回它们?
【发布时间】:2010-11-18 16:26:13
【问题描述】:

我有一个将数据收集到 mysql 表中的应用程序。该表没有唯一的 id 列,因此我无法通过 id 引用特定行。

我想编写一个转储应用程序,它每天都会转储添加到表中的新行以将它们上传到其他地方。我可以通过添加一个唯一的 id 字段并存储最后转储的 id 来做到这一点,但我不想只为此向表中添加一个 id 列。

所以我想我在每次转储时存储表中的行数,并在下次转储表时使用该数字作为偏移量(select * from table limitverylargenumber offset x)。当然,它只有在保证新行始终插入到表的末尾时才有效,因此所有新行都将在偏移量之后。

我想我可以依靠它。我说的对吗?

【问题讨论】:

  • 感谢您的回答。我认为数据库仅使用索引来优化访问并且它不涉及物理内容。我错了。

标签: mysql database storage offset


【解决方案1】:

类似于文件系统,除非对表进行优化或碎片整理,否则删除的数据将腾出一个“槽”来插入新数据。它并不总是附加到表的末尾。

假设你有 3 行:A、B、C

如果你删除 B,那么你的表基本上看起来像 A、[可用空间]、C

因此,如果您将 D 插入表中,它现在看起来像:A、D、C

最好的办法是使用唯一的自动递增键。这也将加快查询速度。

【讨论】:

    【解决方案2】:

    不,你不是。引擎返回行的顺序无法确定。无论如何,没有唯一 ID 的表通常不是一个好主意。在这种情况下,你绝对有足够的理由使用一个。

    【讨论】:

      【解决方案3】:

      不,事实并非如此。数据库将四处移动以优化并使查询更快。您必须在查询中添加 order by 子句以确保任何排序。您绝对应该考虑为您的表添加一个唯一的 ID。

      【讨论】:

      • 我希望我的数据库引擎能够“移动数据以优化和加快查询速度”——我真的这样做了。懒惰的流浪汉什么都不做——我什么都不告诉你。
      • 但这不是您可以依赖的。最终会的。
      猜你喜欢
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      相关资源
      最近更新 更多