インデックスによって異なります。両方の列にインデックスが設定されている場合は、4バイトを比較するだけでよいため、int
にキャストする必要があります。ただし、varchar
列のみがインデックスに登録されている場合は、varchar
にキャストしてください。
最後に、使用するインデックスを確認し、それに応じてキャストするクエリexplain
が必要です。
インデックスが設定されていない場合は、int
にキャストする方が一般的には優れた方法です。しかし、インデックスが設定されていない場合は、実際には関係ありません。キャストする正しい方法を選択するよりも、インデックスを作成するほうがずっと多くの時間を節約できます。表を除いて、表は小さいです。それでは、どちらも問題ではありません。実際に
、我々は考慮に比較のために、だけでなく、鋳造するためのコストだけではなくを取る必要があります:varchar
にint
をキャストすると、int
にvarchar
を解析するよりも若干速いです。ただし、4文字以上のvarcharを比較すると、その利点は役に立たなくなります。値が999を超える傾向がある場合は、int
へのキャストが高速になります。しかし、それはあなたのオペレーティングシステム、アーキテクチャ、あなたのmysqlバイナリで使用される命令セットなどに依存します。本当に信頼できる答えを得る唯一の方法は、ターゲットマシンの状況をベンチマークすることです。
出典
2017-03-24 22:21:50
Psi
なぜあなたはそれらをキャストする必要があると思いますか? –
@PaulSpiegel彼らはとにかく暗黙にキャストされます。 – Psi
@Psi私は知っています。だから私は尋ねる。明示的にキャストしない場合、MySQLは、使用するインデックスに応じてキャストする方法を選択できます。 –