【发布时间】:2015-08-18 03:23:12
【问题描述】:
所以我有一个无序表movement,其中包含timestamp、x 和y 列。我想按timestamp 排序,然后更改并保存表以使所有行都按时间戳排序。
我想使用UPDATE TABLE,但我不确定查询的外观...例如,我有这个:
UPDATE movement
SET ?????
ORDER BY timestamp;
我不想设置任何东西,我只想改变表格的顺序。我需要为我要编写的另一个查询执行此操作,但事实是该表非常大,我需要逐步分解事物,以便以后性能不会很糟糕。那么我该怎么做呢?我发现this SO 帖子解决了类似的问题,但我想知道是否有另一种方法可以做到这一点而不是使用另一个表,因为正如我所说,这个表非常大(数百万行)并重新复制表需要很长时间。
【问题讨论】:
-
虽然以这种方式“排序”表没有多大意义,但您可以创建一个虚拟表以按排序顺序存储值。然后删除原始表的内容并将所有内容复制回来,添加一个名为
sortorder的附加列,您在更新期间使用 rownum 填充该列。但问题是,你为什么要这样做? -
是否有任何理由使用 UPDATE 表名,您可以创建一个新的有序表,并替换旧表吗?
-
您还可以创建一个
view,其中包含按时间戳排序的 SQL 查询。然后您可以像引用表格一样引用此视图。 -
@avk 谢谢,我可能最终会这样做。我想这样做是因为我有另一个要在表上实现的查询,因为它会检查所有
timestamp >= 'example timestamp',所以使用有序表会更快。还是这个逻辑不正确? -
是和不是。视图只不过是一种基于业务逻辑模拟表的简单方法。所以它会查询这个视图而不是把它当作一个表。您可以查看的是名为
materialized views的东西,它实际上创建了虚拟表。不幸的是,这有它自己的缺点,比如刷新间隔。
标签: mysql sql phpmyadmin sql-update sql-order-by