因此,我正在尝试找出一些关于MySQL和排序行功能的优化。据我所知,你可以设置一个最大行比较,如果你的机器内存可以使用它来减少I/O,那么设置一个相当高的值是一个好主意。我的问题是,当你加载更多要排序的东西时,内存是动态分配的,还是静态地作为一个大块来分配?基本上,如果我100%地确定我永远不会有超过1000行要排序,那么将最大行数设置为1200会更有效率吗?为了以防万一,提供一个小缓冲区,而不是100万行。谢谢你的回答,如果我说得不够清楚,很抱歉,我对SQL和MySQL还很陌生。
发布于 2016-06-25 10:51:16
当MySQL需要对结果集进行排序时,例如为了满足SELECT ... ORDER BY,它将采用以下几种方式之一:
ORDER BY可以由INDEX处理,则不需要排序。MEMORY表,并使用内存中的排序来完成此工作。这是非常快的。这样的临时内存表受到tmp_table_size和max_heap_table_size的限制。由于多个连接可能同时执行这些操作,因此最好不要将这些连接设置为高于内存的1%。在其他情况下,MySQL会对数据进行排序。例如,创建索引可能会收集所有信息,对其进行排序,然后将这些信息输出到索引的BTree中。这可能涉及到操作系统排序,同样,可能涉及也可能不涉及I/O。
在RAM中可能完成1200行;1M行可能涉及I/O。
但是,底线是:不用担心。如果您需要ORDER BY,请使用它。让MySQL尽其所能做到最好。
https://stackoverflow.com/questions/37793837
复制相似问题