データベースのスキーマは次のとおりです。
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 秒かかります。1 行の挿入になぜこんなに時間がかかるのかわかりません。読み取りは 0.005 秒程度と非常に高速です。ここの例の設定を使用すると開発 MySQL InnoDB平均すると約 0.002 ~ 0.005 秒です。1 回の挿入に 100 倍以上の時間がかかるのは理解できません。私のコンピューターは次のとおりです。OS:Debian Sid x86-x64、Mysql 5.1、RAM:4GB ddr2、CPU 2.0Ghz デュアル コア、HDD 7200RPM 32MB キャッシュ 640GB。
SELECT * FROM items
; と INSERT INTO items
...; のどちらに 100 倍もの時間がかかるのか、私にはまったく理解できません。テーブルは 70 行しかない小さなものですが、行数が 0 のときでもそれだけの時間がかかりました。
編集: また、このテーブルには、ID を介してリンクされている他のテーブルがかなりあります。このテーブルにリンクされていて、on update=cascade; on delete=cascade; を実行するテーブルがいくつかあります。これがここで最大の問題だと思います。そうであれば、おそらく変更して、さまざまな小さなものが削除されたときに個別に削除することができます。挿入速度は、メインitems
テーブルに挿入する場合でも、外部キー リンクを持つ別のテーブルにも挿入する場合でも、約 0.2 秒のようです。
答え1
まあ、私の最初の推測は、InnoDBが壊れている可能性が高いということです。
- 挿入時に遅い操作を実行するトリガー
- テーブルをロックするプロセスが進行中
- このテーブルを指す外部キー/制約
このような問題を引き起こす可能性のあるものに対してデータベースを完全に監査する最善の方法は、mysqldump コマンドからスキーマ ダンプを読み取ることです。