【问题标题】:Which sorting algorithm(s) does MySQL use?MySQL 使用哪种排序算法?
【发布时间】:2011-11-14 00:35:21
【问题描述】:

如果 MySQL 要在超过 1000 万行的表上运行查询 select * from table order by datetime,其中 datetime 是日期时间列,它使用哪种排序算法?

【问题讨论】:

标签: mysql sorting


【解决方案1】:

您可以在Order By Optimisation 的文档中找到详细信息。

基本上MySQL引擎会考虑使用索引,如果有合适的可用,估计使用它对性能有好处。

如果没有选择这样的索引,则将执行所谓的“文件排序”操作,尽管它的名字很可能完全在内存中执行。但它也可能使用临时文件来换入/换出(待)排序的分区,并将已排序的分区合并为更大的分区。

使用快速排序执行内存中排序。您可以在the source files in the mysys folder 中找到mf_qsort.c 文件。

datetime5 to 8 bytes 表示(取决于是否使用第二个小数),按它排序与对 bigint 排序没有什么不同,occupies 8 bytes

【讨论】:

    【解决方案2】:

    如果您的列日期时间已声明索引,则它可以工作。如果没有索引,您的查询将在数百万条记录上变慢。如果您单独使用它进行报告,应该没问题。

    在一般用法(与许多用户的快速交互)中,这不是一个好习惯。建议在 WHERE 子句上使用附加条件来进一步过滤您的数据。以及在 WHERE 子句中使用的列上具有附加索引。 LIMIT 子句也有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2011-11-02
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      相关资源
      最近更新 更多