[devel] Mysqld CPU usage at www.sisyphus.ru
Grigory Batalov
bga at altlinux.org
Tue Sep 1 22:20:53 UTC 2009
On Tue, 1 Sep 2009 19:03:00 +0400
Mikhail Yakshin wrote:
> > 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 потребует полнотекстовых индексов, да и будет возвращать
> совсем не то, что хочется, как я понял.
Индексов на summary, description сейчас вообще нет.
RLIKE используется для поиска любого совпадения в name, summary,
description. 'запрос%' сработает только на совпадение в начале
строки.
More information about the Devel
mailing list