On Fri, Nov 12, 2010 at 06:06:59PM +0200, Igor Zubkov wrote: IZ> Вот что бы такой запрос к БД работал быстро, а не как сейчас... IZ> ree-1.8.7-2010.02 > Changelog.where('changelogtext LIKE \'%CVE%\'').count IZ> => 4288 IZ> ree-1.8.7-2010.02 > Он не будет работать быстрее. Ибо индексы помогают только для поиска _префикса_. LIKE 'ABC%' -- использует индексы, а LIKE '%CVE%' -- увы, не испоьлзуют. IZ>>> ==  AddIndexOnChangelogtext: migrating ======================================== IZ>>> -- add_index(:changelogs, :changelogtext) IZ>> Ну во первых и впрямь, "а нахрена?!". IZ> Для быстрого поиска. Индесы это не просто "штука чтобы искать все было быстрее". Если бы было так -- просто создавали бы индексы на все колонки и радовались бы жизни :) Это штука, которая поможет искать быстрее, если применяется правильно. "Правильно" очень часто это изменение структуры базы, а не просто создание нужных индексов. >> Даже если бы это работало -- это было бы все равно ужасно. Опиши какую >> задачу ты хочешь решить этим странным действием, и тогда тебе подскажут >> как ее решить красиво. IZ> Дано много-примного записей из changelog'ов пакетов. Примерно: IZ> ree-1.8.7-2010.02 > Changelog.count(:all) IZ> => 690859 IZ> ree-1.8.7-2010.02 > IZ> Столько :) IZ> Охота вытаскивать из этой кучи только те в которых есть упоминание о IZ> CVE. Без индекса это просто медленно. Индекс не делается. IZ> Вот думаю, а не воткнуть ли туда sphinx? Или как бы ещё решить такую задачку. На этапе импортирования %chanelog в базу вытаскивать эти самые CVE. И класть в отдельную табличку с полями -- CVE,package,version к ней два индекса -- один по CVE, другой по паре package,version. version, разумеется, не в смысле %version, а полностью -- включая serial и release. Если нам приходится часто выполнять какой-то сложный запрос -- его не надо оптимизировать. Надо его ликвидировать, а предварительно заготовленный результат держать в отдельной табличке. -- С уважением, Денис http://mithraen.ru/ ----------------------------------------------------------------------------