是否修复了MYSQL表中的行顺序,以便查询始终按该顺序返回它们?

时间:2009-08-11 16:12:46

标签: mysql database storage offset

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

我想编写一个转储应用程序,它每天都会转储添加到表中的新行,以便将它们上传到别处。我可以通过添加一个唯一的id字段并存储转储的最后一个id来实现,但我不想为表添加一个id列。

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

我认为我可以依靠它。我是对的吗?

3 个答案:

答案 0 :(得分:4)

不是不是这样。数据库将移动内容以优化并更快地进行查询。您必须在查询中添加order by子句以确保任何类型的顺序。您一定要考虑在表中添加唯一ID。

答案 1 :(得分:1)

不,你不是。没有关于引擎返回行的顺序的保证。无论如何,没有唯一ID的表通常不是一个诸神之神。在这种情况下,你肯定有足够的理由使用它。

答案 2 :(得分:1)

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

所以说你有3行:A,B,C

如果删除B,那么您的表格基本上看起来像A,[自由空间],C

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

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