私はInnoDBでMySQLを使用しています。
セマンティクスの観点から主キーは必要ないので、主キー(または一意のインデックス)を使用すると、一意でないインデックスよりもクエリが高速になりますか?
インデックスに適しているが一意ではない2つの列があります。ただし、2つの列の組み合わせは常に一意です。列もnullではありません。
2つの一意でない列をインデックスとして設定するだけでよいのでしょうか、それとも2つの列の組み合わせに対して主キーを作成するのでしょうか。
アクセスパターンは通常、最初の列が指定された値である2つまたは4つの行を変更します(そして、すべての組み合わせが一意であると述べたように、2番目の列は異なります)。
たとえば、col1とcol2は次のようになります
1 1
1 2
1 3
1 5
2 1
2 2
2 3
2 5
3 1
3 2
3 3
例として、行(1、2)と(1、3)を一度に変更します。
フォローアップの質問はデータ型についてです。col1はsmallintに適合し、col2はtinyintに適合します。ただし、単一のインデックスに結合する場合、intよりも小さい型や異なる型を使用した場合のパフォーマンスへの影響はわかりません。マニュアルには、主キーに使用すると複数の列が連結されると記載されています。同じタイプのsmallintを使用する方が良いですか?またはintを使用しますか?メモリアクセスに関しては、整列されていません、フルワードアクセスが最速ですか?これはここに影響を及ぼしますか?