3 回答

TA貢獻1858條經(jīng)驗 獲得超8個贊
MySQL的文本處理功能不足以滿足您的需求。存儲功能是一個選項,但可能會很慢。在MySQL中處理數(shù)據(jù)的最佳選擇是添加一個用戶定義的函數(shù)。無論如何,如果要構建MySQL的較新版本,也可以添加一個native函數(shù)。
“正確”的方法是在數(shù)據(jù)庫外部處理數(shù)據(jù),因為數(shù)據(jù)庫用于存儲而不是處理,并且任何繁重的處理都可能給DBMS帶來過多的負擔。此外,在MySQL之外計算字數(shù)使更改字數(shù)定義變得更加容易。更改文檔時如何將單詞計數(shù)存儲在數(shù)據(jù)庫中并進行更新?
存儲功能示例:
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 ;

TA貢獻1836條經(jīng)驗 獲得超4個贊
盡管速度略有降低,但速度要快得多。我發(fā)現(xiàn)它的計數(shù)為4%,對于“估計”方案來說還可以。
SELECT
ROUND (
(
CHAR_LENGTH(content) - CHAR_LENGTH(REPLACE (content, " ", ""))
)
/ CHAR_LENGTH(" ")
) AS count
FROM documents
添加回答
舉報