关于排序大小和效率的MySQL

时间:2016-06-13 15:36:14

标签: mysql sql sorting optimization

所以我试图找出关于MySQL和排序行功能的一些优化。据我所知,你可以设置一个最大行比较,如果你的机器内存可以减少I / O,最好将它设置得相当高。我的问题是,当您加载更多东西进行排序或静态作为大块时,内存是否会动态分配?基本上,如果我确定100%肯定我将永远不会说超过1000行进行排序,设置最大行数1200更高效,为了以防万一,给出一个小缓冲区,而不是100万。感谢您的回答,如果我不够明确,我仍然对SQL和MySQL不熟悉。

1 个答案:

答案 0 :(得分:0)

当MySQL需要对结果集进行排序时,例如为了满足SELECT ... ORDER BY,它将采用以下几种方式之一:

  1. 如果ORDER BY可以处理INDEX,则无需排序。

  2. 如果行数是“小”' (以及其他一些标准),它将在RAM中创建一个MEMORY表,并使用内存中的排序来完成工作。这非常快。此类temp-MEMORY表受tmp_table_sizemax_heap_table_size的限制。由于多个连接可能同时执行此操作,因此最好不要将其设置为高于1%的RAM。

  3. 如果溢出或以其他方式失败,则构建MyISAM表。这可以具有基本上无限的大小。但是,由于缓存,它可能会或可能不会溢出到磁盘,从而产生I / O.

  4. 在其他情况下,MySQL会对事物进行排序。例如,创建索引可以收集所有信息,对其进行排序,然后将信息喷射到索引的BTree中。这可能涉及操作系统排序,同样可能涉及或不涉及I / O.

    1200行可能在RAM中完成; 1M行可能涉及I / O.

    但是,最重要的是:不要担心它。如果您需要ORDER BY,请使用它。让MySQL以最好的方式做到这一点。