MySQLのテキスト処理機能は、必要なものに対して十分ではありません。ストアド関数はオプションですが、おそらく遅くなります。 MySQL内でデータを処理する最善の策は、を追加することです。ユーザー定義関数 。とにかく新しいバージョンのMySQLをビルドする場合は、ネイティブ関数 。
「正しい」方法は、DBが処理ではなくストレージ用であり、重い処理を行うとDBMSに過度の負荷がかかる可能性があるため、DBの外部でデータを処理することです。さらに、MySQLの外部で単語数を計算すると、単語として数えるものの定義を簡単に変更できます。単語数をDBに保存し、ドキュメントが変更されたときに更新するのはどうですか?
ストアド関数の例:
DELIMITER $$
CREATE FUNCTION wordcount(str LONGTEXT)
RETURNS INT
DETERMINISTIC
SQL SECURITY INVOKER
NO SQL
BEGIN
DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
DECLARE currChar, prevChar BOOL DEFAULT 0;
SET maxIdx=char_length(str);
SET idx = 1;
WHILE idx <= maxIdx DO
SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
IF NOT prevChar AND currChar THEN
SET wordCnt=wordCnt+1;
END IF;
SET prevChar=currChar;
SET idx=idx+1;
END WHILE;
RETURN wordCnt;
END
$$
DELIMITER ;