我是开发人员,在管理具有大量记录的表时遇到问题。
我正在执行一个cron作业来填充主表(表A)中的数据,该表有5-6列和大约4,00,000到5,00,000行,然后在此表中创建另一个表和数据将继续增加随着时间的推移。
表A包含原始数据,我的输出表是表B
我的cron脚本截断表B中的数据,然后使用select query
插入数据TRUNCATE TABLE_B;
INSERT INTO TABLE_B (field1, field2)
SELECT DISTINCT(t1.field2), t2.field2
FROM TABLE_A AS t1
INNER JOIN TABLE_A t2 ON t2.field1=t1.field1
WHERE t1.field2 <> t2.field2
GROUP BY t1.field2, t2.field2
ORDER BY COUNT(t1.field2) DESC;
以上选择查询产生大约1,50,000到2,00,000行
现在填充表B需要太多时间,同时如果我的应用程序尝试访问表B,则选择查询失败
解释以下查询结果:
'1','PRIMARY','T1','ALL','field1_index',NULL,NULL,NULL,'431743','Using temporary;Using filesort'
'1','PRIMARY','T2','ref','field1_index','field1_index','767','DBNAME.T1.field1','1','Using where'
有人可以帮助我改进这个过程,或者指导我上述过程的替代方案吗?
谢谢
Suketu
答案 0 :(得分:0)
您应该在存储过程中执行整个过程。
不要截断这么大的表。请按照以下步骤操作:
答案 1 :(得分:0)
根据我的观点,解决方案是这样的:
SELECT
DISTINCT(t1.field2), t2.field2
FROM
TABLE_A AS t1
INNER JOIN
TABLE_A t2 ON
t2.field1=t1.field1
WHERE
t1.field2 <> t2.field2
GROUP BY
t1.field2, t2.field2
ORDER BY
COUNT(t1.field2)
DESC INTO OUTPUT "PATH-TO-FILE";
例如文件为“C:\ TEMP \ DATA1.SQL”。使用TAB分隔符创建一个简单的新文件以插入到任何表中,此查询将发生什么。 现在如何将数据导入表。
LOAD DATA
"PATH-TO-FILE"
INTO TABLE
table_name
使用此查询将插入数据,另一方面,您将能够使用插入数据的表。