Здравствуйте!
имеется таблица с полями 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
Спасибо) будем читать
Спасибо) будем читать матчасть)