INSERT
とUPDATE
パフォーマンスはほとんど変化しない:それは(INT)
と(INT, INT)
キーのため、ほぼ同じになります。
SELECT
複合体の性能PRIMARY KEY
は多くの要因によって決まります。
表がInnoDB
の場合、表は暗黙的にPRIMARY KEY
の値にクラスター化されます。
つまり、両方の値がキーを構成する場合、両方の値の検索が高速になります。余分なキーの参照は不要です。あなたのクエリを想定し
は次のようなものです:
SELECT *
FROM mytable
WHERE col1 = @value1
AND col2 = @value2
とテーブルレイアウトはこれです:
CREATE TABLE mytable (
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB
、エンジンはちょうどテーブル自体に正確なキーの値をルックアップする必要があります。
あなたが偽のIDとして自動インクリメントフィールドを使用する場合:
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
col1 INT NOT NULL,
col2 INT NOT NULL,
data VARCHAR(200) NOT NULL,
UNIQUE KEY ix_mytable_col1_col2 (col1, col2)
) ENGINE=InnoDB
、その後、エンジンが(インデックスから行ポインタを取得し、インデックスix_mytable_col1_col2
で(col1, col2)
の値をルックアップするために、まず、必要があります。 id
の値)、テーブル自体にid
で別の参照を行います。
MyISAM
テーブルはヒープ構成であり、行ポインタは単にファイルオフセットであるため、MyISAM
テーブルでは違いはありません。
どちらの場合も、同じインデックスが作成されます(PRIMARY KEY
またはUNIQUE KEY
)。同じ方法で使用されます。
+1。ありがとう、非常にうまく説明した。 – Fr0zenFyr