我有大量的18m记录(2gb)的句子。
id txt
---------------------------
1 Hi my name is Jim.
2 I love listing music.
....
我想制作包含所有不同词语的新表格。
id word
---------------------------
1 Hi
2 my
3 name
...
制作该请求的最佳方式是什么,请记住大型数据库和执行时间? 所有句子都是FULLTEXT索引。
答案 0 :(得分:1)
这可能是疯狂/天真/不可能 - 但你可以尝试:
SELECT txt FROM old_table INTO OUTFILE 'file_name'
. , ! ?
)\n
CREATE TABLE words (word VARCHAR(50) PRIMARY KEY)
LOAD DATA INFILE 'file_name' IGNORE INTO TABLE words
id
列或使用INSERT .. SELECT ..
将数据复制到新表格。答案 1 :(得分:1)
这是一种方法。 。 。它只需要多次扫描表并假设单词由一个空格分隔:
select substring_index(txt, ' ', 1) as word
from t
union all
select substring_index(substring_index(txt, ' ', 2), ' ', -1) as word
from t
where txt like '% %'
union all
select substring_index(substring_index(txt, ' ', 3), ' ', -1) as word
from t
where txt like '% % %'
union ll
. . .
问题是您必须不断添加子查询,直到文本中的最大字数。
换句话说,SQL 可以做你想做的事。但是,它不一定是最佳解决方案。您可能最好将数据读入Python等工具,然后再将其写入数据库。