MySQL的 - 需要长时间
问题描述:
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) ;
哪里可能是问题? 感谢
答
这听起来像你不是一个非常高端的服务器上,你的问题是通过具有太多的指标雪上加霜。
这个指数它自己是相当巨大之一:
PRIMARY (cycle_id, subject_id, market_id, price)
它横跨四列,其中两个是VARCHAR列。这本身不会是一个问题。但你有三个:
FK1 (market_id)
FK2 (subject_id)
FK3 (currency_id)
每个后插入数据库必须重新计算指标,并且需要花费大量的时间索引和/或索引长度的数量很大。特别是一次插入大量数据时。
答
尝试使用这种要求:
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
尽管明确列出名称是明智的,但性能差异并不显着。 –
这需要1秒?插入3行?或者插入所有10K? –
请为其他表格之一提供“SHOW CREATE TABLE”。 –
什么是'innodb_buffer_pool_size'的价值?你有多少RAM? –