LINUX.ORG.RU
ФорумAdmin

mysql vs postgres vs mssql vs ...


0

0

собственно, не флейма ради а пользы для:

mysql, табличка вида

table t1 (
`id_picture` int(11) NOT NULL auto_increment,
`public` tinyint(1) NOT NULL,
`activ` tinyint(1) NOT NULL default '1',
`date` datetime NOT NULL,
`album` int(11) NOT NULL,
`views` int(11) NOT NULL,
PRIMARY KEY (`id_picture`),
KEY `public` (`public`),
KEY `activ` (`activ`),
KEY `date` (`date`),
KEY `album` (`album`),
KEY `views` (`views`),
KEY `album_2` (`album`,`activ`,`public`),
KEY `date_2` (`date`,`album`,`public`,`activ`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;

миллион записей. В 300 000 из них album равен 2.

Запрос вида

SELECT id_picture,user FROM pictures USE INDEX(date_2) WHERE album=2 and activ=1 and public=1 ORDER BY date DESC LIMIT 299900, 1

выполняется непомерно долго. Запрос вида

SELECT id_picture,user FROM pictures ORDER BY date DESC LIMIT 299900, 1

выполняется втрое быстрее, результат устраивает.

собственно, проблема понятна. Mysql, видимо, строит индекс так, что в данном случае после выборки по WHERE приходится сортировать по дате "вручную", т.е. невозможно использовать индексы. А там 300 000 строк. Ну она и старается, как может. По моему скромному мнению (я не специалист в создании СУБД ником боком), возможно можно попытаться строить индекс по другому и использовать данные индекса по дате чтобы сортировать результат. Я в этом не уверен.

Так вот, к чему разговор. Я сейчас постгрес ставлю. Хочу поглядеть чего там и как. Больше ничего поставить возможности нет. А результаты сравнения были бы интересны. Посему просьба: если у кого есть тестовая машинка с поднятым mysql, oracle, mssql, db2 etc, прошу провести тест, если есть возможность. За единицу измерения времени запроса предлагаю взять средний результат MySQL для 20 запросов и измерять в my.

mysql5.0.22
Если кому интересно - присоединяйтесь.
Спасибо.

★★★★★

Поцанчек, дай query plan погонять? :)

anonymous
()

а если убрать USE INDEX() ??

imho должно быть быстрее...

MKuznetsov ★★★★★
()

А если индекс переделать так: KEY `date_2` (`album`,`activ`,`public`,`date`)

С таким индексом и такой выборкой тормозить будет что угодно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.