如何提高MyISAM中INSERT / UPDATE查询的性能

时间:2012-01-05 11:22:08

标签: mysql myisam

我正在使用MySQL数据库,它有两个MyISAM表1.主(inf_article_details)表有超过100万条记录和2.临时(temp_inf_article_details)表有大约50,000+条记录。这些表结构相同,只有一列(BIGINT作为数据类型)作为主键。数据定期从不同的数据源提供程序填充到临时表中,并且我有一个预定的作业,它将数据从临时表推送到主表。

仅供参考,主表在KEY上划分为20个分区

主表的索引信息(inf_articles_details)如下:

  

显示来自inf_articles_details的索引;   enter image description here

临时表的索引信息(temp_inf_articles_details)如下:

  

显示temp_inf_articles_details的索引;   enter image description here

解释主表的结果如下:

  

解释select * from inf_articles_details   enter image description here

解释临时表的结果如下:

  

解释select * from temp_inf_articles_details   enter image description here

主表(inf_articles_details)结构(总共有70多列)

  

创建表inf_articles_details
                          ard_ean_code bigint(20)unsigned NOT NULL,
                          ard_provider_reference bigint(20)无符号DEFAULT NULL,
                          ard_reference varchar(20)NOT NULL,
                          ard_modified_date日期时间DEFAULT NULL,
                          PRIMARY KEY(ard_ean_code),
                          KEY idx_ard_modified_dateard_modified_date
                        )ENGINE = MyISAM DEFAULT CHARSET = utf8 / *!50100 PARTITION BY KEY()PARTITIONS 20 * /

临时表(temp_inf_articles_details)结构是(大约有70多列)

  

创建表temp_inf_articles_details
                               tard_ean_code bigint(20)unsigned NOT NULL,
                               tard_provider_reference bigint(20)无符号DEFAULT NULL,
                               tard_status tinyint(3)unsigned NOT NULL DEFAULT'0',
                               PRIMARY KEY(tard_ean_code),
                               KEY idx_statustard_status
                             )ENGINE = MyISAM DEFAULT CHARSET = utf8

作为数据更新任务的一部分,我们将这两个表连接到“ard_ean_code& tard_ean_code”,并使用临时表中的值更新主表中的现有行,并将新行从临时表插入到master中。但是这种数据更新花费了太多时间来从临时表插入/更新数据到主表。

我是否需要进行任何调整以提高性能?

感谢。

1 个答案:

答案 0 :(得分:1)

MyISAM支持并发插入:如果表在数据文件中间没有空闲块,则可以在其他线程从表中读取的同时将新行插入其中。

参考:Bulk Data for MyISAM Tables

Concurent Inserts

希望它在某种程度上有所帮助