我目前正在研究excel的价格导入功能,并寻找有关处理PHP和SQL之间的大数据集的最佳方法的建议。
用户基本上可以导入单个文件来更新所有价格表(最多15个)。因此,一行示例数据可能看起来像
会员代码| PRICELIST1价格| PRICELIST2价格| PRICELIST3价格| PRICELIST4价格
这些文件最多可包含30 000条唯一记录。问题出现的地方是需要对这些数据进行验证,并在表格中回复用户,其中突出显示某些单元格的价格变化大于40%。
产品存储在多个表中,因此查询获取单行的价格表值可能需要一秒钟。最初我尝试将所有记录一起取出(这也需要一些时间)但是如果文件有超过10000条记录,那么它对于sql server来说太大了。
目前我的工作非常缓慢(1000条记录需要9分钟才能验证),而且我一次只能验证一条记录。
如果有人就如何加快这个过程提出建议,或者对如何最好地处理如此大的验证过程有任何建议,我会非常感激。只要资源友好且速度更快,我就不会接受任何想法。
答案 0 :(得分:0)
非常感谢Jens Schulze和DaveyBoy,我找到了一个惊人的解决方案。我现在将数据写入服务器上的csv文件,并使用sqls bulk import函数将数据导入临时表,并在删除表之前使用查询交叉引用数据。结果非常快(创建一个包含20000条记录的文件需要0.3秒将其插入表格中,选择记录并在服务器拥有数据后将其删除)下面是一个示例。
CSV格式(将文件放在C:\ csvtest.txt中)
1,TD015022,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00
2,TD015023,7.00,7.00,7.00,7.00,7.00,7.00
3,TD015024,14.00,14.00,14.00,14.00,14.00,14.00
4,TD015025,9000.00,9000.00,9000.00,9000.00,9000.00,9000.00
SQL
CREATE TABLE CSVTest
(ID INT,
Member_Code VARCHAR(40),
[Frank Test] VARCHAR(40),
[Price List 1] VARCHAR(40),
[Price List 2] VARCHAR(40),
[Price List 3] VARCHAR(40),
[Ten Percent] VARCHAR(40),
[thaka bts test] VARCHAR(40)
)
GO
BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest
GO
--Drop the table to clean up database.
DROP TABLE CSVTest
GO
希望这有助于下一个被困的人。 还要感谢sqlauthority开始的工作示例。