1

最適化の問題があります。私はまだ MySQL インデックスにはあまり興味がありません。いくつかの記事と質問を読みましたが、探しているものが見つかりませんでした。

ほぼ 100 万行のテーブルに WHERE 条件を指定した UPDATE ステートメントがあります。

この UPDATE 操作を高速化したいと考えています。ほとんどの時間は、WHERE で指定されたレコードを探すことに費やされていると思います。

私のクエリは、さまざまな URL で次のようになります。

UPDATE table SET updated = 1, updated_date = now() , [some more fields updated]
WHERE url = 'someurl.com?id=123532js23';

URL は一意です。現在、PRIMARY KEY として定義されている AUTO INREMENT id フィールドがあります。<、>、または BETWEEN 操作は必要ないので、ハッシュを使用できますか?

最高のパフォーマンスを得るには、どのエンジンとインデックスを使用する必要がありますか?

私の友人の 1 人が、URL フィールドで InnoDB + UNIQUE を使用することを提案しました。他にできることはありますか?この UPDATE は本当に何度も実行されます。毎日約 1 000 000 回実行され、ほとんどの実行で更新が行われます (約 95%)。

助けてくれてありがとう!

4

1 に答える 1

3

私の友人の1人が、URLフィールドでInnoDB+UNIQUEを使用することを提案しました。他にできることはありますか?このUPDATEは、実際には何度も実行されます(1日に約1 000 000回実行され、ほとんどの実行で更新が行われます)。約95%です。

あなたの友達は正しいです。

1つは、それURLが長くなる可能性があり、インデックスキーの可能な最大長InnoDB767バイトであるということです。

したがって、URLをハッシュして(たとえば、を使用して) 、URLのハッシュを含むフィールドにインデックスMD5を作成することをお勧めします(もちろん、条件で使用します)。UNIQUEWHERE

INSERT
INTO    mytable (url, hashed_url, ...)
VALUES  ('someurl.com?id=123532js23', MD5('someurl.com?id=123532js23'))

UPDATE  mytable
SET     ...
WHERE   hashed_url = MD5('someurl.com?id=123532js23')
于 2013-01-15T12:13:17.773 に答える