【问题标题】:MYSQL order by date or primary key?MYSQL 按日期或主键排序?
【发布时间】:2012-08-04 01:10:24
【问题描述】:

我有一个带有自动递增主键列和日期时间列的表。我想返回按创建日期排序的行。

按日期或主键订购有关系吗?我想它比0000-00-00 00:00:00 或时间戳的日期格式更快的主键。新记录将具有更大的主键。然而,每个人都按日期字段排序。

【问题讨论】:

  • 每个人都按日期字段排序是什么意思?
  • 我的意思是在大多数查询中程序员按日期排序,但主键也记录时间。
  • datetime字段是否保存插入记录时的当前日期和时间??
  • @Sabin 创建时。日期时间和主键一样保持不变。
  • 所以我认为无论你使用什么排序都无关紧要,如果你索引日期字段也会更快。我个人使用主键自动递增字段进行排序。编辑:如果您同时插入多行,则两条记录可能具有相同的日期时间值..但主键不同,因此最好使用自动增量列进行排序

标签: php mysql


【解决方案1】:

按日期字段排序,但请确保在日期字段上放置索引。

日期字段是二进制字段,它与主键一样快。 (日期是 3 个字节,而整数主键是 4。)它不使用字符串对其进行排序,正如您所假设的那样。

更重要的是,它表明了你的意图,(加上主键可以环绕)。

此外,如果您使用 innodb,则完全有可能主键不按顺序排列,具体取决于事务交错的方式。

此外,如果您擅长阅读查询计划,请将日期列添加到用于查询的同一索引的末尾。但是,这仅适用于特定情况,因此只有在您知道它会有所帮助时才这样做。即不要盲目地这样做。

【讨论】:

  • 即使没有索引日期字段也一样快吗?
  • @bfavaretto 不,你必须索引它。最快的是按您已经用于搜索的索引进行排序。因此,请检查您的查询计划,然后将日期字段添加到搜索索引中。 (正确执行此操作可能会很棘手,而且您必须非常了解数据库。大多数情况下,只需在日期字段上添加索引并停在那里即可。)
  • @Ariel,这就是我要注意的。你应该在我认为的答案中说明这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多