记一次 tp5 操作50w 数据的项目(tp5真心很乏力)

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)

原文地址:https://www.cnblogs.com/JANCHAN/p/11195623.html