[sisyphus] postgresql index row
Денис Смирнов
mithraen на freesource.info
Пт Ноя 12 16:39:23 UTC 2010
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/
----------------------------------------------------------------------------
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : отсутствует
Тип : application/pgp-signature
Размер : 198 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20101112/efe5309f/attachment.bin>
Подробная информация о списке рассылки Sisyphus