この奇妙な状況を考えてみましょう。
インデックスの冗長性があります。MySQL:なぜvarcharフィールドの代わりにintにジョインすることをお勧めしますか?
TableA (item_id, code_key, data01, ... data0n)
TableB (item_id, code_key, dataA1, ... dataAn)
item_idとcode_keyの両方が一意であり、両方のテーブルのプライマリキーである可能性があります。 item_idまたはcode_keyは、参照/関係を失うことなく、両方のテーブルから削除できます。
私は知っていますが、これは質問のポイントではありません。 両方の列が索引付けされているとします。
Item_idはINTで、codeKeyはVARCHAR(100)です。
select * from TableA INNER JOIN TableB USING(item_id)
いうより:
select * from TableA INNER JOIN TableB USING(code_key)
両方の列がインデックス化され、パフォーマンスが同じになるので、私はそれのポイントが表示されていない
誰かがそれがより良いクエリだ示唆されます。 ... ではない?
INTを持つのは、ON句にVARCHARを置いたほうが速いでしょうか?両方とも索引付けされていてもですか?
[SQLでの文字列比較とint結合のパフォーマンス]の重複(http://stackoverflow.com/questions/12431107/performance-of-string-comparison-vs-int-join-in-sql) – sagi
Performancewise、非常に大きなデータセットを除いて、その差はごくわずかです。主な要因は、特定の状況下でコードキーが変更できるかどうかです。 – Strawberry
あなたのコメントは、他の質問とは逆に、私が思ったものと一致しています。 Code_keyが挿入され、item_idのように変更されることはありません。私はシーンの背後にあるMysqlがこれらの列を索引付けしていると考えています。その宣言型にもかかわらず、検索や結合などの操作で同じパフォーマンスベンチマークヒットとなります。 – koalaok