Данные: таблица объявлений
CREATE TABLE IF NOT EXISTS `blurb_topics` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`poster` varchar(200) NOT NULL,
`poster_id` int(10) unsigned NOT NULL DEFAULT '0',
`subject` varchar(255) NOT NULL, # заголовок
`posted` int(11) unsigned NOT NULL DEFAULT '0', # время поста, timestamp
`forum_id` int(10) unsigned NOT NULL DEFAULT '0', # id подкатегории
`cat_id` int(11) NOT NULL DEFAULT '0', # id категории
`sticky` int(11) unsigned NOT NULL DEFAULT '0', # "закрепление" в топе на первом месте, timestamp
'deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
`fliped` int(11) unsigned NOT NULL, # время "подбросить" объявления, timestamp
`path` varchar(300) DEFAULT NULL,
`separated` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `topics_forum_id_idx` (`forum_id`),
KEY `cat_id` (`cat_id`),
KEY `poster_id` (`poster_id`),
KEY `posted` (`posted`,`sticky`,`fliped`),
KEY `deleted` (`deleted`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
Нагрузка на mysql возрастает когда, примерно, 3 пользователя сёрфят список объявлений, который получается запросом
SELECT * blurb_topics WHERE deleted=0 ORDER BY (sticky > 0) DESC, fliped DESC, posted DESC LIMIT 0, 50 ');
Про поля: sticky — время «закрепления» объявления в топе, вернее time()+future(); fliped — пользователь может «подбросить» своё объявление что бы не дублировать информацию.
Я делал смешанный индекс `posted`+`sticky`+`fliped`+`deleted`, mysql вообще перестал использовать индекс судя по explain. Сейчас он использует индекс только по `deleted`
Как правильно расставить индексы или может быть перелопатить структуру?
MySQL Server version: 5.5.15-log Source distribution
PHP 5.3.6 with Suhosin-Patch в режиме php-fpm
VPS 1Gb Ram, 2400 МГц