MySQL - INSERT查询需要很长时间

时间:2016-11-08 08:19:12

标签: mysql optimization query-optimization database-performance

我有一个大约10,000行的表。 表的结构是:

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,price)
  • 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) ; 

哪里可能是问题? 感谢

2 个答案:

答案 0 :(得分:2)

听起来你不是在一个非常高端的服务器上,你的问题因索引太多而加剧了。

它自己的索引相当庞大:

PRIMARY (cycle_id, subject_id, market_id, price)

它跨越四列,其中两列是varchar列。这本身不会成为问题。但你还有三个:

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

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

答案 1 :(得分: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行一样慢。