今天在公司帮产品经理处理几十个比较大的excel表格遇到了小小的波折,简单记录一下
平均一个excel就有一百多万条数据(48m左右),以下为操作步骤:
1、用navicat导入excel文件:少导入数据,有很多数据不进行导入
2、设置mysql表大小的限制参数,默认4m,这里我设置512m,仍然导入部分数据
3、excel文件转csv,成功全部导入
4、无脑写一个sql语句进行处理,好吧,很慢,慢出*
5、给字段b添加btree索引,速度可以承受了
a、b、c、d四个数据库字段,sql语句如下、
SELECT * FROM sogou WHERE (d LIKE '%music%' OR (b LIKE '%歌%' OR b LIKE '%音乐%' OR b LIKE '%曲%'))
AND b NOT IN
(SELECT b FROM sogou WHERE b LIKE '%阿里巴巴%' OR b LIKE '%baidu%' OR b LIKE '%百度%'
OR b LIKE '%彩铃%' OR b LIKE '%com%' OR b LIKE '%财务%' OR b LIKE '%财富%' OR b LIKE '%彩票%' OR b LIKE '%车%'
OR b LIKE '%电信%' OR b LIKE '%电台%' OR b LIKE '%地址%' OR b LIKE '%大学%' OR b LIKE '%电脑%' OR b LIKE '%Google%' OR b LIKE '%谷歌%' OR b LIKE '%高考%' OR b LIKE '%格式%' OR b LIKE '%公司%'
OR b LIKE '%肝%' OR b LIKE '%工商%' OR b LIKE '%胡歌%' OR b LIKE '%教育%' OR b LIKE '%建筑%' OR b LIKE '%ktv%' OR b LIKE '%论坛%' OR b LIKE '%mv%' OR b LIKE '%mtv%' OR b LIKE '%MP4%'
OR b LIKE '%MP5%' OR b LIKE '%power%' OR b LIKE '%pp%' OR b LIKE '%腾讯%' OR b LIKE '%qq%' OR b LIKE '%器%' OR b LIKE '%全文%' OR b LIKE '%软件%' OR b LIKE '%sohu%' OR b LIKE '%搜狗%'
OR b LIKE '%sougou%' OR b LIKE '%sogou%' OR b LIKE '%书%' OR b LIKE '%视频%' OR b LIKE '%淘宝%' OR b LIKE '%taobao%' OR b LIKE '%图%' OR b LIKE '%网%' OR b LIKE '%www%' OR b LIKE '%word%'
OR b LIKE '%显卡%' OR b LIKE '%小学%' OR b LIKE '%学校%' OR b LIKE '%小说%' OR b LIKE '%院%' OR b LIKE '%移动%' OR b LIKE '%中学%' OR b LIKE '%在线观看%' OR b LIKE '%//%')
GROUP BY b
以下为以上sql的explains结果:
select_type | table | partions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|
PRIMARY | sogou | index | nor_b | nor_b | 1803 | 1023338 | 37.57 | Using where | ||
DEPENDENT SUBQUERY | sogou | index_subquery | nor_b | nor_b | 1803 | func | 12 | 100 | Using where; Using index; Full scan on NULL key |
只是简单记录一下,之后再谈一谈如何进一步优化和细节补充。