MySQL使用哪些排序算法?

8
如果MySQL要在一个有超过1000万行的表中运行查询

该字段上是否有索引? - Karoly Horvath
https://dev.mysql.com/doc/refman/8.0/en/order-by-optimization.html - Rohit Prasad
2个回答

1

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

基本上,如果合适的索引可用,并且使用它对性能有益,则MySQL引擎将考虑使用索引。

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

使用快速排序执行内存排序。您可以在 mysys文件夹中的源文件 中找到一个 mf_qsort.c 文件。

datetime表示为5到8个字节(取决于是否使用秒分数),按其排序与排序bigint没有区别,后者也占用8个字节


0

如果您的列datetime已声明索引,则它可以正常工作。 如果没有索引,查询将在数百万条记录上变得较慢。 如果您仅将其用于报告,则应该没问题。

在一般用途(与许多用户快速交互)中,这不是一个好习惯。 建议对WHERE子句使用其他条件来进一步过滤数据。 同时,在WHERE子句中使用的列上还要有附加索引。 LIMIT子句也很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接