[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