[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