Оптимизация MYSQL

Opik

Новичок
"попробуй сменить тип на MyISAM"
так сначала MyISAM и стоял, сменил на InnoDB, стало намного лучше. Но спасибо за остальное,
ушел читать :)
 

Falc

Новичок
По мойму на поля oid и mid нужен составной индекс
Вообще если идет очень много изменений данных то нужно постаратся минимизировать кол-во индексов (лишних индексов быть не должно).

И покажи структуру таблиц:
participants и battles
 

Opik

Новичок
CREATE TABLE `battles` (
`kid` int(11) NOT NULL auto_increment,
`offer` bigint(20) default NULL,
`time` bigint(20) default NULL,
`id` int(11) default NULL,
`attacker` varchar(20) default NULL,
`defender` varchar(20) default NULL,
`kick` tinyint(4) default NULL,
`block` tinyint(4) default NULL,
`type` tinyint(4) default NULL,
`damage` int(11) default NULL,
`attackerSide` enum('1','2') NOT NULL default '1',
`defenderSide` enum('1','2') NOT NULL default '1',
`comment` text,
`kick_type` enum('1','2') NOT NULL default '1',
PRIMARY KEY (`kid`),
KEY `offer` (`offer`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=41229 ;

CREATE TABLE `participants` (
`oid` int(20) NOT NULL default '0',
`mid` int(20) NOT NULL default '0',
`mlogin` varchar(35) NOT NULL default '',
`mlevel` int(3) NOT NULL default '0',
`malign` float NOT NULL default '0',
`mklan` varchar(25) NOT NULL default '',
`HPnow` int(5) NOT NULL default '1',
`side` int(1) NOT NULL default '1',
`takeDamage` int(15) NOT NULL default '0',
`time` int(15) NOT NULL default '0',
`getResult` int(1) NOT NULL default '0',
`debug` text NOT NULL,
KEY `mid` (`mid`),
KEY `side` (`side`),
KEY `oid` (`oid`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Я придержался совета Фаната, касательно разделения таблиц, помогло, спасибо. Но всё равно есть ещё куда стремится. Вот думаю, может указать engine что для неё HEAP?
 

Falc

Новичок
Т.к. у тебя нет составного индекса запросы с "where oid = '39084' and mid = '3408'" у тебя и тормозят. Когда сделаешь составной индекс не забудь удалить как минимум один из существующих.
А вот почему у тебя тормозил INSERT не очень понятно возможносервер был сильно нагружен.
Еще посмотри во что упирается произодительность сервера, если у тебя проц не загружен полностью то скорее всего проблемы с доступом к диску и стоит увеличить размеры кешей.

>>Вот думаю, может указать engine что для неё HEAP?
Heap работает конечно быстро, но данные не сохраняются на диске при падении сервера данных не останется.
 

Opik

Новичок
"Heap работает конечно быстро, но данные не сохраняются на диске при падении сервера данных не останется."
Смотри какая схема, идет бой, он в таблице battles, после завершения он оттуда удаляется и переносится в архивную таблицу.
Т.к. у тебя нет составного индекса запросы с "where oid = '39084' and mid = '3408'" у тебя и тормозят.
А как создавать составной индекс? смотрел в мануале, но видимо плохо искал.
 

Falc

Новичок
Если ты создал индекс KEY ( oid, mid )
То удалить надо было oid

-~{}~ 12.08.05 17:15:

Еще думаю надо проверить действительно ли тебе нужен индекс mid
 

ONK

Пассивист PHPСluba
По мойму на поля oid и mid нужен составной индекс
Совершенно верное замечание. Только надо понять какой столбец использовать первым, а какой вторым (смотреть на основные запросы, соотношения и структуру таблицы).
 

Opik

Новичок
Я правильно понимаю!? - при создании составного индекса обычные индексы на этих полях не нужны?

-~{}~ 12.08.05 16:40:

Запросы на обновление(более частые):
[sql]
UPDATE `participants` SET `takeDamage` = `takeDamage` + 4 WHERE oid = '51432' and mid = 1330
[/sql]
на удаление:
[sql]
DELETE from participants where oid = 1;
[/sql]
выборка:
[sql]
SELECT `side`, `mlogin`, `mid`, `mlevel`, `malign`, `mklan` FROM `participants` WHERE `oid` = 1
[/sql]

Я поставил первым столбец oid, потом mid.
 

Falc

Новичок
Opik
>>Я правильно понимаю!? - при создании составного индекса обычные индексы на этих полях не нужны?

Нет. не нужен отдельный индекс на первое поле.

Но если у тебя нет запросов с ограничением только на mid (без ограничения на oid), то и индекс на mid тебе не нужен.
 
Сверху