Możliwości obsługi tekstu MySQL nie są wystarczające do tego, czego chcesz. Przechowywana funkcja jest opcją, ale prawdopodobnie będzie powolna. Najlepszym sposobem na przetwarzanie danych w MySQL jest dodanie funkcja zdefiniowana przez użytkownika . Jeśli i tak zamierzasz zbudować nowszą wersję MySQL, możesz również dodać funkcja natywna .
„Właściwym” sposobem jest przetwarzanie danych poza DB, ponieważ DB służą do przechowywania, a nie przetwarzania, a każde intensywne przetwarzanie może zbytnio obciążyć DBMS. Ponadto obliczanie liczby słów poza MySQL ułatwia zmianę definicji tego, co liczy się jako słowo. Co powiesz na przechowywanie liczby słów w bazie danych i aktualizowanie jej, gdy dokument zostanie zmieniony?
Przykładowa zapisana funkcja:
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 ;