Kemampuan penanganan teks MySQL tidak cukup baik untuk apa yang Anda inginkan. Fungsi tersimpan adalah opsi, tetapi mungkin akan lambat. Taruhan terbaik Anda untuk memproses data dalam MySQL adalah dengan menambahkan fungsi yang ditentukan pengguna . Jika Anda tetap akan membuat versi MySQL yang lebih baru, Anda juga dapat menambahkan fungsi asli .
Cara yang "benar" adalah memproses data di luar DB karena DB adalah untuk penyimpanan, bukan pemrosesan, dan pemrosesan berat apa pun dapat membebani DBMS terlalu banyak. Selain itu, menghitung jumlah kata di luar MySQL memudahkan untuk mengubah definisi dari apa yang dianggap sebagai kata. Bagaimana dengan menyimpan jumlah kata dalam DB dan memperbaruinya saat dokumen diubah?
Contoh fungsi tersimpan:
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 ;