動的行が最後に移動した場合のデータのフェッチ速度に違いはありますか?
例:int、int、int、textはint int text intよりも優れていますか?
私のリードはこの事実について私に知らせました、しかしそのような情報がインターネットから得られていないのはどうしてですか?助けてください ?
動的行が最後に移動した場合のデータのフェッチ速度に違いはありますか?
例:int、int、int、textはint int text intよりも優れていますか?
私のリードはこの事実について私に知らせました、しかしそのような情報がインターネットから得られていないのはどうしてですか?助けてください ?
これはデータアライメントによるものです。INT
4バイトを使用するため、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
INT
16バイト(4)をすぐに取得できる場合よりも高速に処理されます。INT
TEXT
詳細については、MySQLのドキュメントを参照してください。
http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html
TEXT
また、BLOB
データは列自体と同じスペースに格納されません。これらは、この目的のために予約された特別な領域に保管されます。
これらの列の取得は常に遅くなりますが、速度低下の量は、システムのチューニングとデータの負荷によって大幅に異なります。関係がない場合もあれば、深刻なスラッシングが発生する場合もあります。管理できる場合は、フィールドの上に短いVARCHAR
フィールドを使用する必要があることに注意してくださいTEXT
。非常に長いブロブフィールドは無料では提供されません。
そうは言っても、TEXT
列は実際のデータへのポインタとして行に格納されるためVARCHAR
、ほとんどの状況よりも大幅に小さくなります。それらを選択しない場合、それらはロードされず、データをアセンブルするために必要な追加のシークが発生しません。
これがMySQLのバージョンとチューニングに確実に適用されるようにするには、代表的なデータでいっぱいの2つの大きなテーブルを作成し、それを自分でベンチマークします。