在mysql数据库中按日期排序存储记录

在mysql数据库中按日期排序存储记录,mysql,Mysql,我想在mysql数据库中存储一些记录。记录有一个日期列。我想按日期列的排序顺序存储它们 例如,日期为2011年9月27日的记录被存储为日期为2011年9月26日的记录顶部的第一行: id_1,名称_1,2011年9月27日 id_2,姓名_2,2011年9月26日 如果新记录在将来的日期出现,它们将被插入顶部 我不想在使用select by order by desc时订购它们。 我希望它们按排序顺序直接插入数据库 怎么做 谢谢…您可以通过添加另一个表来完成此操作-将当前记录和新记录插入到该表中

我想在mysql数据库中存储一些记录。记录有一个日期列。我想按日期列的排序顺序存储它们

例如,日期为2011年9月27日的记录被存储为日期为2011年9月26日的记录顶部的第一行:

id_1,名称_1,2011年9月27日 id_2,姓名_2,2011年9月26日

如果新记录在将来的日期出现,它们将被插入顶部

我不想在使用select by order by desc时订购它们。 我希望它们按排序顺序直接插入数据库

怎么做


谢谢…

您可以通过添加另一个表来完成此操作-将当前记录和新记录插入到该表中,然后按如下方式执行和插入操作:

INSERT into newtable
select * from temptable
order by temptable.date
你为什么要这么做?为什么不在查询中使用orderby呢


正如下面的评论所指出的,每次都需要截断新表

当人们想要确定存储记录的物理顺序时,我总是感到惊讶。 基本上,这是一个糟糕的想法,有多种原因

1您不应关心记录的物理存储方式

2记录的呈现方式应引起您的关注。这就是为什么我们有内置的订单

3确定物理存储应该由该领域的专家来完成,因为它会影响性能—这是一个主题,我将不详细介绍

基本上,担心的是按排序的顺序取出数据,而不是按排序的顺序取出数据


这是一个坏主意的原因是因为您将篡改主键,而主键从来都不是一个好主意。最重要的是,每次插入内容时都必须对记录重新排序。只是不要重新发明热水。

您无法选择插入行的位置


这里有一个可能的解决方案:

你为什么要这样做?天哪,插入它们并创建索引。在检索时对它们进行排序。这不是数据库的工作方式。您将数据存储在其中,而不是在数据库中排序,您根据需要对结果集进行排序和筛选。为什么??但你为什么要这样做?@brightness-在Stackoverflow上接受答案是一个很好的练习-如果你能接受每个问题的答案,你将得到更多对未来问题的回答。每次插入新行之前,你还需要删除这个新表中的条目。@GhazanfarMir-是的,你的权利。。。。无论如何,这是一个愚蠢的想法-我总是在查询中使用OrderBy。。。如果他们选择这样做,只是试着为他们指明正确的方向……定期重新排序一个价值约为20000万的数据库难道不会比在每次请求时重新排序更有效吗?目前,重新订购流程似乎是我整个系统的瓶颈。如果我在客户端执行此操作,它将挂起4-7秒。我还没有尝试在服务器上做这件事,但是,对于客户端处理它的方式,我没有很高的期望,它不会。通常,您必须从磁盘检索20m的值,然后MySQL必须将其存储在某个地方,如果您的RAM不足,它将再次进入磁盘。然后它必须根据您想要的条件对其进行排序,并将其写回磁盘。另一种方法是,让MySQL选择最佳的保存方式—通过PK物理订购—然后检索所需的内容—您肯定不需要2000万条记录—这很快,因为您将使用一些条件—然后按照您需要的方式对其进行排序。这是相同的操作,但规模较小。