それはインデックスに依存します。両方の列にインデックスが設定されている場合は、int
にキャストする必要があります 、4バイトを比較するだけでよいためです。ただし、varchar
のみの場合 列にインデックスが付けられ、varchar
にキャストされます 。
最後に、クエリをexplain
する必要があります ed、どのインデックスが使用されているかを確認し、それに応じてキャストします。
インデックスが設定されていない場合は、int
にキャストします 一般的にはより良いアプローチです。ただし、インデックスが設定されていない場合は、実際には問題ではありません。正しいキャスト方法を選択するよりも、インデックスを作成する方がはるかに時間を節約できます。ただし、ここでもテーブルは小さいです。そうすれば、それも問題ではありません。
実際、比較のコストだけでなく、キャストのコストも考慮する必要があります。int
のキャスト varchar
に varchar
を解析するよりもわずかに高速です int
に 。ただし、少なくとも4文字のvarcharを比較すると、その利点は役に立たなくなります。値が999を超える傾向がある場合は、int
にキャストします より速くなります。ただし、これはオペレーティングシステム、アーキテクチャ、mysqlバイナリで使用される命令セットなどによって異なります。本当に信頼できる答えを得る唯一の方法は、ターゲットマシンでその状況をベンチマークすることです。