0

これが私の現在のテーブルです。

CREATE TABLE `linkler` (
  `link` varchar(256) NOT NULL,
  UNIQUE KEY `link` (`link`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

これら 2 つのクエリのみをテーブルで使用しますSELECT EXISTS (SELECT 1 FROM linkler WHERE link = ?)INSERT INTO linkler (link) VALUES (?)

データベースのインデックス作成についてはよくわかりません。同じものを 2 回追加することはないので、固有のものとしてマークすることをお勧めします。パフォーマンスを向上させるためにできることはありますか? たとえば、mysql が二分探索などを実行できるように、行が常にソートされるようにすることはできますか?

4

1 に答える 1

1

一意のインデックスを追加することは完璧です。また、一意のインデックスがあるため、挿入を行う前に存在を確認する必要はありません。INSERT IGNORE行が存在しない場合は、単純に行を挿入するために使用できます (存在する場合はエラーを無視します)。

INSERT IGNORE INTO linkler (link) VALUES (?)

SELECT/INSERT の組み合わせを実行するよりも高速になるかどうかは、予想される重複の頻度によって異なります。

ETA: この表でそれが唯一の列である場合は、PRIMARY KEY単なる a ではなくa にした方がよいかもしれませUNIQUE KEYんが、明確にすること以外はそれほど重要ではないと思います。

于 2013-01-02T15:42:43.630 に答える