mysql INNODB插入速度很慢

mysql INNODB插入速度很慢

資料庫的架構如下。

 CREATE  TABLE  `items` (  
 `id` mediumint( 8  )  unsigned NOT  NULL  AUTO_INCREMENT ,
 `name` varchar( 45  )  NOT  NULL ,
 `main_type` tinyint( 4  )  NOT  NULL ,
 `rarity` tinyint( 4  )  NOT  NULL ,
 `stack_size` smallint( 6  )  NOT  NULL ,
 `sub_type` tinyint( 4  )  NOT  NULL ,
 `cost` mediumint( 8  )  unsigned NOT  NULL ,
 `ilvl` smallint( 6  )  unsigned NOT  NULL DEFAULT  '0',
 `flavor_text` varchar( 250  )  NOT  NULL ,
 `rlvl` tinyint( 3  )  unsigned NOT  NULL ,
 `final` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 PRIMARY  KEY (  `id`  )  ) ENGINE  = InnoDB  DEFAULT CHARSET  = ascii;

現在,在此表上執行插入操作需要 0.22 秒。我不知道為什麼單行插入要花這麼長時間。讀取速度真的非常快,大約 0.005 秒。使用此處的範例配置開發 mysql innodb平均約 0.002 至 0.005 秒。為什麼執行一次插入要花費超過 100 倍的時間,這對我來說毫無意義。我的電腦如下。作業系統:Debian Sid x86-x64,Mysql 5.1,記憶體:4GB ddr2,CPU 2.0Ghz 雙核心,硬碟 7200RPM 32MB 快取 640GB。

為什麼 SELECT * FROM 花費的時間幾乎是 100 倍items;與插入items...;對我來說永遠沒有任何意義。它仍然是一個只有 70 行的小表,即使它有 0 行,也花了那麼長時間。

編輯:此外,該表還有很多其他表透過 id 連結到自身。其中有一些連結到它並執行 on update=cascade;刪除=級聯;。我相信這是最大的問題。如果是的話,我可能可以進去更改它,並在刪除各種小東西時對其進行單獨刪除。插入速度似乎約為 0.2 秒,無論我是在僅執行插入操作items還是在另一個具有到主表的外鍵連結的表上執行插入操作。

答案1

好吧,我的第一個猜測是你的 InnoDB 可能壞了。你可以檢查是否有

  • 觸發器會在插入時執行緩慢的操作
  • 正在進行的進程會鎖定表
  • 指向該表的外鍵/約束

針對可能導致此類問題的任何情況徹底審核資料庫的最佳方法是從 mysqldump 命令讀取模式轉儲。

相關內容