docid (bigint(20))
サーバー上にフィールドを持つテーブルがあり、msgtext (longtext)
他のテーブルは気にしません。
私がやりたいことは、msgtext
(いくつかの正規表現を使用して clean msgtext
)で関数を実行し、新しく作成された列のデータベースに結果を追加することcleanMsgtext
です。私の目標は、これを最適化し、理想的には、プロセスで自分のメモリ要件を最小限に抑えることです。
メモリ要件を最小限に抑える最も簡単な方法は、一度に 1 ステップずつ実行することです。つまり、1 行をプルダウンし、関数を実行してから、結果をプッシュ バックします。もちろん、これは少し極端なので、選択クエリを最小限に抑えるために、一度に 10,000 行ずつ行をプルダウンする方が理にかなっています。私がやりたいことは、更新クエリも最小限に抑えることです。つまり、私の選択クエリは次のようなものです
select docid, msgtext
from db
where docid='1' or docid='2' or ... or docid='10000'
事前にdocidをプルダウンするなどして、プログラムで簡単に実行できます(これもばかげているかもしれませんが)。これだけで、非常に高速になり、満足しています。
テーブルを更新するためにこれを行う同等の方法があるかどうかは疑問です。同様の方法で更新メッセージを連結して、複数のクエリから 1 つのクエリを作成することはできますか? 毎回行全体をプルダウンするとこれが可能になることを読んだことがありますが、私にとってはdocidは一意の識別子であるため、必要ではないようです。
結論として、サイズ N のバッチを選択し、データをローカルで処理してから、サイズ N のバッチで再度更新したいと思います。これは可能ですか?