A:需求
1、从excel把数据导入mysql
2、简单数据清洗
3、数据查询优化
B:解决方案
1、excel的数据量比较大(60w),先把excel转成csv文件(手动操作),然后使用SpreadsheetReader(github)把数据写入txt(因为有些数据需要处理),使用mysql的load data local infile 把数据导入mysql。
tp的一些配置和mysql配置
tp5配置
'break_reconnect' => true,//断线重连 'params' => [ PDO::ATTR_CASE => PDO::CASE_LOWER, PDO::ATTR_EMULATE_PREPARES => true,//预处理 PDO::MYSQL_ATTR_LOCAL_INFILE => true, //可以使用文件导入 ]
相关代码:
$sql = "load data local infile '路径' ignore into table 表名 character set gbk fields terminated by '_' lines terminated by '|'(`列名`);";
Db::execute($sql);
mysql 配置
local-infile=1 #打开使用文件导入
secure_file_priv = /www/www #路径
2、简单数据清洗
INSERT INTO 表名(`列名`) SELECT `列名` from 表名;//使用最多 UPDATE 表名 a,表名 b set a.a=b.a,a.b=a.b+b.b WHERE a.`code`=b.`code` and a.lb=lb;//使用第二多
3、使用tp5自带的left join 2w数据的两张表,查询速度会很慢,可以自己去修改对应代码,或者使用in来转化;用in就使用到索引比left join快很多。laravel框架不会有这个问题。
使用paginate() 里面会自动去获取count,数据多了,也会很慢,直接使用tp5里面的简单查询即可paginate(10,true)
。