Схема базы данных выглядит следующим образом.
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 секунд. С использованием примера конфигурации отсюдаdev mysql innodbв среднем ~0,002 - ~0,005 секунды. Почему для одной вставки требуется в 100 раз больше времени, мне не понятно. Мой компьютер выглядит следующим образом. ОС: Debian Sid x86-x64, Mysql 5.1, ОЗУ: 4 ГБ ddr2, процессор 2,0 ГГц двухъядерный, HDD 7200 об/мин 32 МБ кэш 640 ГБ.
Почему SELECT * FROM ; занимает почти в 100 раз больше времени, items
чем INSERT INTO items
...;, я никогда не пойму. Это все еще маленькая таблица, всего 70 строк, и это заняло столько времени, даже когда в ней было 0 строк.
Редактировать: Также эта таблица имеет довольно много других таблиц, связанных с ней через идентификатор. Есть несколько из них, которые связаны с ней и делают on update=cascade; on delete=cascade;. Я считаю, что это самая большая проблема здесь. Если это так, то я, вероятно, могу войти и изменить ее и выполнить отдельные удаления из различных мелких вещей, когда они удаляются. Скорость вставки, кажется, составляет ~0,2 секунды, независимо от того, делаю ли я вставку только items
или я также делаю это в другой таблице, которая имеет ссылку внешнего ключа на основную.
решение1
Ну, моя первая догадка, что ваш InnoDB, вероятно, сломан. Вы можете проверить, нет ли каких-либо
- триггеры, которые будут выполнять медленную операцию по вставке
- происходят процессы, которые блокируют таблицу
- внешние ключи/ограничения, указывающие на эту таблицу
Лучший способ полностью проверить базу данных на предмет всего, что может вызвать подобные проблемы, — это прочитать дамп схемы с помощью команды mysqldump.