De tekstverwerkingsmogelijkheden van MySQL zijn niet goed genoeg voor wat je wilt. Een opgeslagen functie is een optie, maar zal waarschijnlijk traag zijn. U kunt de gegevens het beste in MySQL verwerken door een toe te voegen door de gebruiker gedefinieerde functie . Als je toch een nieuwere versie van MySQL gaat bouwen, kun je ook een native functie .
De "juiste" manier is om de gegevens buiten de DB te verwerken, aangezien DB's voor opslag zijn, niet voor verwerking, en elke zware verwerking kan de DBMS te zwaar belasten. Bovendien maakt het berekenen van het aantal woorden buiten MySQL het gemakkelijker om de definitie te wijzigen van wat als een woord telt. Hoe zit het met het opslaan van het aantal woorden in de DB en het bijwerken wanneer een document wordt gewijzigd?
Voorbeeld opgeslagen functie:
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 ;