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

儘管明確列出名稱是明智的,但性能差異並不顯着。 –