reverse index или что-то другое

Здравствуйте!
имеется таблица с полями surname , name, birthday. Все они с типом text.
Причем дата в birthday хранится как 'дд.ММ.гггг'.
Все поля имеют свои индексы.
Но поиск длится очень медленно, если нужно искать по последним двум цифрам года.
Например:

SELECT * FROM TABLE WHERE surname LIKE 'Иван%' AND birthday LIKE '%86';

(Записей в базе ну очень много).
Есть мысль создать реверсивный индекс, но как его сделать, не могу найти.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А вы считаете что поиск с

А вы считаете что поиск с двумя LIKE при этом на очень большой таблице должен работать быстро? :) Да ещё если у вас тип TEXT, а не скажем CHAR или VARCHAR.
За счёт чего интересно? Чудес не бывает.
Кстати для начала, посоветовал бы поле birthday в DATA перевести, потому что поиск по дате будет гораздо быстрее LIKE. Кроме того, это ещё и позволит написать функцию, которая в итоге может использовать разбиение одной большой таблицы на несколько меньших.
Ещё вопрос - статистика собрана? (VACUUM ALALYZE на таблицу)
Ещё вопрос - а почему бы вам не нормализовать вашу таблицу? У вас стопудово в ней куча записей, где повторяются одни и те же имена, отчества и фамилии. И место снизится и в итоге быстродействие в разы вырастет, когда будет поиск по цифровому id вместо LIKE

vacuum analyze - сделан,

vacuum analyze - сделан, просто прочитал в википедии про индексы, там где пример про yahoo.com)) Но и так SELECT * FROM TABLE WHERE surname LIKE 'Иван%' AND birthday LIKE '03.11.%' не ищет нормально.

Данных в базе порядка 13 Гб, да и полей в таблице естественно больше.
Попробую переконвертить в тип data)

Если данных так много, тогда

Если данных так много, тогда ТЕМ БОЛЕЕ необходимо производить нормализацию данной плоской таблицы.

Нормализовать - это вынести

Нормализовать - это вынести данные, по которым осуществляется поиск в отдельную таблицу , естественно уже данные уже не повторяются , а не нужные поля плоской таблице просто удалить, и добавить поле ссылающееся на новую таблицу по id.
Я правильно вас понимаю? :)

Грубо говоря так. Однако,

Грубо говоря так. Однако, вообще-то нормализация - это термин из теории реляционных БД.
Считается, что для оптимальной работы любая БД должна быть нормализована до НФБК - нормальной формы Бойса-Кодда. Бывают, конечно, исключения из этого правила, однако для большинства БД оно должно выполняться.
Как раз недавно я разместил на этом сайте учебник на тему теории реляционных БД. Там есть и про нормализацию:
http://postgresql.ru.net/doc/dbguide/index.html

Спасибо) будем читать

Спасибо) будем читать матчасть)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023