MySQLに格納されている値が常に正確に32文字になることがわかっている場合、列タイプを作成するCHAR
代わりに列タイプを作成する方がパフォーマンスが向上しVARCHAR
ますか?VARCHARとCHARを使用した場合のパフォーマンスの違いは正確には何ですか?
ありがとう。
CHAR
。列を検索する可能性が高い場合は、CHAR
を超えるパフォーマンスのわずかなアップグレードを示しますVARCHAR
。
データサイズは固定されるためCHAR
、VARCHAR
同等のものはプレフィックスとして1〜2バイトを格納するため、を使用することにマイナス面はありません。
最初の質問に対する答えは、「列タイプをVARCHARではなくCHARにする方がパフォーマンスが良いですか?」...は「はい」です。間違いなく。
長さが32になることが常にわかっている場合は、必ずCHARを使用する必要があります。
ここでもいくつかの良い答えが示され ています。SQLでVARCHARではなくCHARを選択するのはなぜですか。
VARCHAR列は、1バイトまたは2バイトのプレフィックスを使用して長さを格納します。
CHARとは対照的に、VARCHAR値は1バイトまたは2バイトの長さのプレフィックスとデータとして格納されます。長さプレフィックスは、値のバイト数を示します。値に必要な長さが255バイト以下の場合、列は1つの長さバイトを使用し、値に必要な長さが255バイトを超える場合は2つの長さバイトを使用します。
したがって、VARCHAR列は非常にわずかに大きくなります。常に正確に32文字になることがわかっている場合、CHARは妥当なようです。長さが完全にわからない場合は、ほとんどの場合、VARCHARを使用します。
文字列が常に32文字になる場合(おそらくmd5ハッシュを使用している場合)、Char(32)に移動します。このスクリプトを任意のテーブルに対していつでも実行して、mysqlの内容を確認できます。
SELECT * FROM table PROCEDURE ANALYSE();
これにより、行全体が分析され、いくつかの提案が得られます。テーブルに適切な数または行がある場合にのみうまく機能します。