如果MySQL要在一个有超过1000万行的表中运行查询
您可以在 Order By Optimisation 的文档中找到详细信息。
基本上,如果合适的索引可用,并且使用它对性能有益,则MySQL引擎将考虑使用索引。
如果没有选择这样的索引,则将执行所谓的“filesort”操作,尽管它的名称是这样的,但它很可能完全在内存中执行。但它也可能使用临时文件来交换(要)排序的分区,并将排序的分区合并成更大的分区。
使用快速排序执行内存排序。您可以在 mysys文件夹中的源文件 中找到一个 mf_qsort.c
文件。
如果您的列datetime已声明索引,则它可以正常工作。 如果没有索引,查询将在数百万条记录上变得较慢。 如果您仅将其用于报告,则应该没问题。
在一般用途(与许多用户快速交互)中,这不是一个好习惯。 建议对WHERE子句使用其他条件来进一步过滤数据。 同时,在WHERE子句中使用的列上还要有附加索引。 LIMIT子句也很有帮助。