2016-06-13 1 views
0

私は、MySQLとソート行の機能に関して少しの最適化を考えようとしています。私はそれを理解しているので、最大の行比較を設定することができます。マシンのメモリがI/Oを減らすためにそれを取ることができるなら、これをかなり高い値に設定することをお勧めします。私の質問は、大量のブロックとしてソートまたは静的に多くのものをロードするときに、メモリが動的に割り当てられるかどうかです。基本的に私が100%を確実に知っているなら、ソートするために1000行を超えることはありません.1000万と比べて小さなバッファを与えるために、1200行の最大行を設定する方が効率的でしょう。あなたの答えをありがとうと申し訳ありませんが私はまだSQLとMySQLには非常に新しいです十分な明示的ではない場合。 MySQLは、このようなSELECT ... ORDER BYを満たすように、結果セットをソートする必要がある場合、それはいくつかの方法のいずれかで動作しますMySQLに関するソートのサイズと効率

答えて

0

ORDER BYINDEXで扱うことができる場合

  1. 、何のソートは必要ありません。

  2. 行数が「小」(およびその他の基準)の場合、RAMにMEMORYテーブルが作成され、メモリ内ソートが使用されます。これは非常に高速です。このようなtemp-MEMORYテーブルは、tmp_table_sizemax_heap_table_sizeの両方によって制限されています。複数の接続がこのように同時に実行されている可能性があるため、RAMの1%よりも高く設定しないことをお勧めします。

  3. これがオーバーフローしたり、失敗した場合は、代わりにMyISAMテーブルが構築されます。これは本質的に無制限のサイズを持つことができます。それでも、キャッシングのために、ディスクに流出する可能性があります。それによってI/Oが発生します。

他にも、MySQLがソートを行うケースがあります。たとえば、インデックスを作成すると、すべての情報が収集され、並べ替えられ、インデックスのBTreeに情報が書き出されます。これにはオペレーティングシステムのソートが含まれている可能性があります。ソートはI/Oに関係する場合とそうでない場合があります。

1200行はとなります。はRAMで実行されます。 1M行はとなります。にはI/Oが関係します。

しかし、結論は次のとおりです。心配しないでください。 ORDER BYが必要な場合は、それを使用してください。 MySQLをできるだけ最善の方法でやりましょう。

関連する問題