research_words
数億行のテーブルがあります。
毎日、数千万の新しい行を追加する必要があります。そのうちの約 5% はまったく新しい行であり、95% はその行のいくつかの列に追加する必要がある更新です。どれがどれかわからないので、次を使用します。
INSERT INTO research_words
(word1,word2,origyear,cat,numbooks,numpages,numwords)
VALUES
(34272,268706,1914,1,1,1,1)
ON DUPLICATE KEY UPDATE
numbooks=numbooks+1,numpages=numpages+1,numwords=numwords+1
これは、主キーがオーバーしている InnoDB テーブルword1,word2,origyear,cat
です。
私が抱えている問題は、毎日新しい行を挿入する必要があり、毎日の行を挿入するのに24時間以上かかることです! 明らかに、その日の行を挿入するのに1日以上かかることはありません。挿入を高速化する方法を見つけなければなりません。
他のテーブルについては、ALTER TABLE ... DISABLE KEYS;
andを使用して大きな成功を収めましたLOAD DATA INFILE
。これにより、1 時間以内に数十億行を追加できます。残念ながら、このテーブルの列を増やしていることを除いて、それは素晴らしいことです。行を追加するために行が存在するかどうかを確認する必要があるため、キーを無効にすることが役立つとは思えません。
私のスクリプトは PHP ですが、行を追加するときは、PHPexec
で送信するのではなく、MySQL を直接呼び出してコマンドのテキスト ファイルを渡します。この方法の方が高速だからです。
ここで速度の問題を解決するためのアイデアはありますか?