私は 800 万行のテーブルを持っています。このテーブルは、悪意のある単語の膨大なリストに対してスキャンする必要があります。
私の最初のアイデアは次のとおりでした。
UPDATE `master` SET `blacklisted`='1' WHERE MATCH (`content-desc`, `content-title`) AGAINST ('
badword1 | badword2 | badword3 | "and many more"' IN BOOLEAN MODE)
残念ながら、このバージョンではいくつかの単語が忘れられており、大文字と小文字が区別されませんでした!
次の試みは
$badwords = array("badword1","badword2","badword3","and-many-more");
foreach($badwords AS $name)
{
$sql = "UPDATE `master` SET `blacklisted`='1' WHERE concat(`content-title(mediumtext)`,`content-desc(mediumtext)`) LIKE '%".$name."%'";
sleep(6);
// Could limit this query by 100.000 and adding another foreach loop help?
// How would the foreach look like (select count(*) from master?)/100.000
}
私のサーバーをすぐに殺した多くのクエリ!たぶん、コメントされたアイデアが役立つでしょうか?! (しかし、どうやって?)
mysql サーバーに過度の負荷をかけずに、このクエリを解決する方法を誰が最もよく思いつきますか? ありがとうございました!