我被要求在资源优化方面选择哪三个是最好的选择。
假设我有一个包含数千条记录的大型Excel文件,我需要提取这些数据并插入它们进入数据库。
3个选项是:
这是面试(我把它标记为家庭作业,不确定它是否正确);我思索了一会儿:
所以,我实际上选择了答案一,在做之前我想了一些。
这是错的。我实际上并不知道三者中哪一个是正确的。
有人可以帮我这个吗?这个答案真的很糟糕吗?我认为成千上万的插入查询会“糟糕”,但似乎我完全错了..
编辑
澄清:我的问题不是哪个是最好的优化绝对,而是我提出的三个中的哪一个;所以我不是在考虑其他的选择,只是解释为什么我错了,哪个是议论,而是最好的答案。
答案 0 :(得分:3)
一方面,这似乎是一个棘手的问题。理智的答案是,使用批量导入实用程序,如MySQL的mysqlimport
或SQL Server的BULK INSERT ... FROM [data_file]
。另一方面,这些实用程序基本上是执行上述三种选项之一(尽管可能是高度优化的方式)。
事实是,在回答这些问题时你必须考虑整个问题。 “资源利用率方面的最佳选择”是案例3,因为您的内存使用率相当低,并且大多数数据库平台都设计为处理每秒请求数量的指标。
答案 1 :(得分:2)
“错误”似乎是错误的答案。
有许多权衡,“正确”答案取决于您未列出的因素,例如:1)这是一个生产数据库吗? 2)插入此数据时网站是否在线? 3)如果插入行1并且公众可见,那么行10,985不是吗? 4)当你在场时,其他人是否会写信给你?
假设所有这些问题的答案都是肯定的,我可能会一次读取并插入行。前两个将锁定您的表,以便其他任何人都无法访问它。使用选项3,您甚至可以计算插入率。
答案 2 :(得分:0)
我认为PHP方式预先假定案例3,因为您最大限度地减少了使用的内存量。它很慢,但它减少了每个操作占用内存的方式。将整个事物加载到一个大的多维数组中并执行复杂的插入需要更多的资源,并且加速并没有那么好。问题在于,这是一项长期运行的任务,所以也许这就是让你失望的原因。
无论谁写这篇文章似乎都没有考虑过插入操作对于数据加载来说是昂贵的,并且当你需要加载大量数据时不应该使用它。