我是一名开发人员,在管理包含大量记录的表时遇到问题。大记录表插入问题Mysql
我正在执行一个cron作业来填充主表(表A),其中有5-6列和大约4,00,000到5,00,000行的数据,然后创建另一个表和表中的数据将继续随着时间增加。
表A中包含的原始数据和我的输出表是表B
我的cron脚本表B中截断数据然后使用选择查询
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
这种类型的问题已被问到。 http://stackoverflow.com/questions/2838828/bulk-insert-problem-in-mysql – Ankit 2011-05-09 11:21:46
要使EXPLAIN语法有用,请为这两个表包含“SHOW CREATE TABLES”的输出。 – 2011-05-09 11:41:44
'code' CREATE TABLE'TABLE_A'( 'id' INT(11)无符号NOT NULL AUTO_INCREMENT, 'field1' VARCHAR(255)NOT NULL, 'field2' VARCHAR(255)NOT NULL, 'count_field3' INT (10)无符号NOT NULL, 'field_4' INT(10)无符号NOT NULL, PRIMARY KEY('id') KEY'field2_index'('field2') KEY'field1_index'('field1') )ENGINE = MyISAM AUTO_INCREMENT = 435692 DEFAULT CHARSET = utf8'code' – Suketu 2011-05-10 07:43:09