1

usersfirstnameと照合で呼び出されるテーブルがありますutf8_bin

次のようなクエリを実行すると、内部で何が起こるか知りたい

SELECT * FROM `users` `a` WHERE `a`.`firstname` = 'sander' COLLATE utf8_general_ci

firstnameはインデックスではありません。コマンドを実行したときのパフォーマンスはどうなりますか?

utf8_general_ciそして、デフォルトの照合があり、クエリがなしで実行された場合はどうなりますかCOLLATE

大きなテーブル (800 万以上のレコード) に与える影響を知りたい

4

1 に答える 1

3

この場合、強制照合は列のエンコーディングと同じ文字セットで定義されるため、パフォーマンスへの影響はありません。

ただし、別の文字セットで定義された照合を強制した場合、MySQL は列の値をトランスコードする必要がある場合があります (これパフォーマンスに影響を与える可能性があります)。強制照合が Unicode 文字セットを超える場合、MySQL はこれを自動的に行うと思います。その他の状況では、「不正な照合の組み合わせ」エラーが発生します。

列の定義に対して記録された照合は、どの照合が優先されるかという MySQL への単なるヒントであることに注意してください。Collat​​ion of Expressionsで詳述されているルールに応じて、特定の式で使用される場合と使用されない場合があります。

于 2013-07-05T14:08:32.777 に答える