ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

php – 从巨大阵列插入批量MySql:优化问题

2019-06-21 10:03:08  阅读:199  来源: 互联网

标签:php mysql performance bulk


在资源优化方面,我被要求选择哪个是三个中最好的选项.假设我有一个包含数千个记录的大型Excel文件,我需要提取这些数据并将它们插入到数据库中.
3个选项是:

>将所有内容加载到多维数组中,只需一个复杂查询即可插入所有内容;
>将所有内容加载到多维数组中,然后遍历每个excel行并执行简单的插入查询.
>在循环内部,读取每个Excel行,将其放入数组中,然后在数据库上执行简单的插入查询.

这是面试(我把它标记为家庭作业,不确定它是否正确);我思索了一会儿:

>案例1:我可能会冒* out_of_memory *错误(当然取决于机器),但它是对数据库执行较少请求的解决方案.两个缺点是要分配给阵列和数据库的大量内存.我知道我可以将excel转换为CSV,但这不是一个选项.我会选择一个大阵列和一个批量插入,但我担心这对数据库来说很难.
>案例2:将数据加载到数组时可能会出现* out_of_memory *错误,但第二项任务不会出错.尽管如此,执行数千次查询可能会对数据库造成性能损失,并且此查询可能是优化的候选者.
>案例3:仍有一个循环超过数千条记录(这也需要大量内存……),并且仍然有数千条查询要运行(它会访问数据库).

所以,我实际上选择了答案一,在做之前我想了一些.

这是错的.我实际上并不知道三者中哪一个是正确的.

有人可以帮我吗?这个答案真的很糟糕吗?我认为成千上万的插入查询会“糟糕”,但似乎我完全错了..

编辑
澄清:我的问题不是关于哪个是绝对最好的优化,而是我提出的三个中的哪一个;所以我不是在考虑其他的选择,只是解释为什么我错了,而且论证的是最好的答案.

解决方法:

一方面,这似乎是一个棘手的问题.理智的答案是,使用批量导入实用程序,如MySQL的mysqlimport或SQL Server的BULK INSERT … FROM [data_file].另一方面,这些实用程序基本上是执行上述三个选项之一(尽管可能是高度优化的方式).

事实是,在回答这些问题时你必须考虑整个问题. “资源利用率方面的最佳选择”是案例3,因为您的内存使用率相当低,并且大多数数据库平台都设计为处理每秒请求数量的指标.

标签:php,mysql,performance,bulk
来源: https://codeday.me/bug/20190621/1253991.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有