3 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
MySQL的文本處理功能不足以滿足您的需求。存儲功能是一個(gè)選項(xiàng),但可能會(huì)很慢。在MySQL中處理數(shù)據(jù)的最佳選擇是添加一個(gè)用戶定義的函數(shù)。無論如何,如果要構(gòu)建MySQL的較新版本,也可以添加一個(gè)native函數(shù)。
“正確”的方法是在數(shù)據(jù)庫外部處理數(shù)據(jù),因?yàn)閿?shù)據(jù)庫用于存儲而不是處理,并且任何繁重的處理都可能給DBMS帶來過多的負(fù)擔(dān)。此外,在MySQL之外計(jì)算字?jǐn)?shù)使更改字?jǐn)?shù)定義變得更加容易。更改文檔時(shí)如何將單詞計(jì)數(shù)存儲在數(shù)據(jù)庫中并進(jìn)行更新?
存儲功能示例:
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貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
盡管速度略有降低,但速度要快得多。我發(fā)現(xiàn)它的計(jì)數(shù)為4%,對于“估計(jì)”方案來說還可以。
SELECT
ROUND (
(
CHAR_LENGTH(content) - CHAR_LENGTH(REPLACE (content, " ", ""))
)
/ CHAR_LENGTH(" ")
) AS count
FROM documents
添加回答
舉報(bào)