如果MySQL要运行查询select * from table order by datetime
,datetime
是一个日期时间列,在一个包含> 1000万行的表上,它会使用哪种排序算法?
答案 0 :(得分:0)
如果您的列日期时间已声明索引,则该方法有效。没有索引,在数百万条记录上的查询速度会变慢。如果仅将其用于报告,就可以了。
一般情况下(与许多用户快速交互)这不是一个好习惯。建议对WHERE子句使用其他条件,以进一步过滤数据。以及在WHERE子句中使用的列上具有附加索引。 LIMIT子句也有帮助。
答案 1 :(得分:0)
您可以在 Order By Optimisation 的文档中找到详细信息。
本质上MySQL引擎会考虑使用索引,如果有合适的索引,估计使用对性能有好处。
如果没有选择这样的索引,那么将执行所谓的“文件排序”操作,尽管它的名字很可能完全在内存中执行。但它也可能使用临时文件来换入/换出已(待)排序的分区,并将已排序的分区合并为更大的分区。
使用快速排序执行内存中排序。您可以在 the source files in the mysys folder 中找到 mf_qsort.c
文件。
A datetime
由 5 to 8 bytes 表示(取决于是否使用第二个分数),按它排序与排序 bigint
和 occupies 8 bytes 没有什么不同。
答案 2 :(得分:-2)