6

動的行が最後に移動した場合のデータのフェッチ速度に違いはありますか?

例:int、int、int、textはint int text intよりも優れていますか?

私のリードはこの事実について私に知らせました、しかしそのような情報がインターネットから得られていないのはどうしてですか?助けてください ?

4

2 に答える 2

3

これはデータアライメントによるものです。INT4バイトを使用するため、32ビット(4バイトに相当)プロセッサは4バイトシーケンスのデータを処理します。プロセッサに最適な順序でデータを取得できると、結果が速くなり、パフォーマンスが向上します。

参照: http: //en.wikipedia.org/wiki/Data_structure_alignment

現在、これは通信チャネルを介してデータを転送する際によく見られる問題です(特定のコンパイラは通常、特定のメンバーを4バイトに整列するために予約バイトを追加することによってデータ構造を最適化するため)。NDBCLUSTERただし、MySQLはエンジンとの4バイトアライメントも考慮に入れています。これはTEXT、値の間に構造を配置することによりINT、必要以上のデータ取得を強制することを意味します。

したがって:

INT INT INT INT TEXTプロセッサがのサイズを気にせずにINT INT TEXT INT INT16バイト(4)をすぐに取得できる場合よりも高速に処理されます。INTTEXT

詳細については、MySQLのドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html

于 2012-07-19T16:34:50.163 に答える
1

TEXTまた、BLOBデータは列自体と同じスペースに格納されません。これらは、この目的のために予約された特別な領域に保管されます。

これらの列の取得は常に遅くなりますが、速度低下の量は、システムのチューニングとデータの負荷によって大幅に異なります。関係がない場合もあれば、深刻なスラッシングが発生する場合もあります。管理できる場合は、フィールドの上に短いVARCHARフィールドを使用する必要があることに注意してくださいTEXT。非常に長いブロブフィールドは無料では提供されません。

そうは言っても、TEXT列は実際のデータへのポインタとして行に格納されるためVARCHAR、ほとんどの状況よりも大幅に小さくなります。それらを選択しない場合、それらはロードされず、データをアセンブルするために必要な追加のシークが発生しません。

これがMySQLのバージョンとチューニングに確実に適用されるようにするには、代表的なデータでいっぱいの2つの大きなテーブルを作成し、それを自分でベンチマークします。

于 2012-07-19T16:59:12.733 に答える