0

INSERT查询我有大约10.000行的表。表中的 结构是:MySQL的 - 需要长时间

CREATE TABLE IF NOT EXISTS `demands` (
    `cycle_id` int(11) NOT NULL, 
    `subject_id` varchar(45) COLLATE utf8_unicode_ci NOT NULL, 
    `market_id` int(11) NOT NULL, 
    `price` int(11) NOT NULL, 
    `currency_id` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `amount` bigint(20) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

键:

  • PRIMARY(cycle_id,subject_id,market_id,价格)
  • FK1(market_id)
  • FK2(subject_id)
  • FK3 (currency_id)

查询等这需要很长时间(大约1秒):

INSERT INTO poptavky VALUES 
    (4, 'user', 17, 110, 'pound', 110) , 
    (4, 'user', 17, 90, 'pound', 120) , 
    (4, 'user', 17, 70, 'pound', 130) ; 

哪里可能是问题? 感谢

+0

这需要1秒?插入3行?或者插入所有10K? –

+0

请为其他表格之一提供“SHOW CREATE TABLE”。 –

+0

什么是'innodb_buffer_pool_size'的价值?你有多少RAM? –

回答

1

这听起来像你不是一个非常高端的服务器上,你的问题是通过具有太多的指标雪上加霜。

这个指数它自己是相当巨大之一:

PRIMARY (cycle_id, subject_id, market_id, price) 

它横跨四列,其中两个是VARCHAR列。这本身不会是一个问题。但你有三个:

FK1 (market_id) 
FK2 (subject_id) 
FK3 (currency_id) 

每个后插入数据库必须重新计算指标,并且需要花费大量的时间索引和/或索引长度的数量很大。特别是一次插入大量数据时。

0

尝试使用这种要求:

INSERT INTO client (prenom, nom, ville, age) 
VALUES 
('Rébecca', 'Armand', 'Saint-Didier-des-Bois', 24), 
('Aimée', 'Hebert', 'Marigny-le-Châtel', 36), 
('Marielle', 'Ribeiro', 'Maillères', 27), 
('Hilaire', 'Savary', 'Conie-Molitard', 58); 

的SGBD将更好地知道在哪里把数据。

不过只有1000行的尝试,看看它是否为较慢10000行。

+0

尽管明确列出名称是明智的,但性能差异并不显着。 –