总数据量20亿,只有两个列,id和name
id和name是多对多的关系,一个id可以有很多name,一个name可能会被很多id用
比如
1 asd
1 qwe
2 fgh
2 asd
3 ljk
这20亿条数据分了10个表,每个表2亿,每个表分别对id和name做了两个普通的btree索引。
数据可能在每个表里有重复,也有可能在不同表里有重复。
比如表1可能有2个
1 asd
1 asd
也有可能表1没有重复的
1 asd
但是表2里有
现在要对这20亿数据去重
可以有
1 asd
1 qwe
但是不能有两个
1 asd
数据库服务器24G内存,建了个memory引擎的表,加了unique 索引,从每个表内单独选取数据,用insert ignore插入,然后再写入到硬盘,对每个表内的重复数据进行了去重,2亿差不多能去掉3000-5000w
但是因为内存大小限制,内存里只能同时放下2亿数据。用myisam引擎的表加unique索引去重,跑了1天都没插完2亿数据(数据库放在ssd上)……
第二个问题:
对name列建立索引,里面有中文有英文,gbk编码。假如其中一个name的内容是:
"我们希望 V2EX 能够成为中文世界中氛围最好的社区"
假如我查询关键词是 “中文世界”,想匹配上面的那句话,如果想用上索引的话,是不是只能用full text 索引了?不过我不需要任何分词之类的功能,只要匹配文中任意位置的字符串就行。建full text 索引好像有点慢。
id和name是多对多的关系,一个id可以有很多name,一个name可能会被很多id用
比如
1 asd
1 qwe
2 fgh
2 asd
3 ljk
这20亿条数据分了10个表,每个表2亿,每个表分别对id和name做了两个普通的btree索引。
数据可能在每个表里有重复,也有可能在不同表里有重复。
比如表1可能有2个
1 asd
1 asd
也有可能表1没有重复的
1 asd
但是表2里有
现在要对这20亿数据去重
可以有
1 asd
1 qwe
但是不能有两个
1 asd
数据库服务器24G内存,建了个memory引擎的表,加了unique 索引,从每个表内单独选取数据,用insert ignore插入,然后再写入到硬盘,对每个表内的重复数据进行了去重,2亿差不多能去掉3000-5000w
但是因为内存大小限制,内存里只能同时放下2亿数据。用myisam引擎的表加unique索引去重,跑了1天都没插完2亿数据(数据库放在ssd上)……
第二个问题:
对name列建立索引,里面有中文有英文,gbk编码。假如其中一个name的内容是:
"我们希望 V2EX 能够成为中文世界中氛围最好的社区"
假如我查询关键词是 “中文世界”,想匹配上面的那句话,如果想用上索引的话,是不是只能用full text 索引了?不过我不需要任何分词之类的功能,只要匹配文中任意位置的字符串就行。建full text 索引好像有点慢。