[devel] Mysqld CPU usage at www.sisyphus.ru

Mikhail Yakshin greycat at altlinux.org
Tue Sep 1 15:03:00 UTC 2009


>> тогда запрос и explain от него - в студию.
>
> Вот такие запросы тормозят:
>
> SELECT DISTINCT s.name, s.version, s.rel, m.packager, s.summary, s.repo
> FROM srpm as s, maintainers as m, rpm as r WHERE  r.srpm = s.name AND
> m.mail=s.packager AND ( s.name RLIKE 'unichrome'  OR  s.summary RLIKE
> 'unichrome'  OR  s.description RLIKE 'unichrome'  OR  r.namen RLIKE
> 'unichrome' ) AND s.repo='Sisyphus' AND r.repo='Sisyphus' ORDER BY 1
> ASC LIMIT 0,20;
>
> Может быть, заменить RLIKE на MATCH AGAINST ? Будет быстрее?

Во-первых, проверить индексы, по которым производится JOIN. Имеет
смысл выписать это в явный "INNER JOIN ON что-то":

> WHERE  r.srpm = s.name AND m.mail=s.packager

Во-вторых, такой RLIKE скорее всего вообще не использует индексы и
запрос превращается в FULL SCAN. Проверить индексы, по которым
делается RLIKE и заменить его либо на LIKE 'запрос%', либо на
равенство.

MATCH AGAINST потребует полнотекстовых индексов, да и будет возвращать
совсем не то, что хочется, как я понял.

-- 
WBR, Mikhail Yakshin


More information about the Devel mailing list