powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск текста по словам по индексу
2 сообщений из 2, страница 1 из 1
Поиск текста по словам по индексу
    #39029679
Alexey Agafonov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Итак есть задача - найти текст по словам по индексу.
Код: sql
1.
select * from table where str like '%text%'

не подходит, так как индекс не подключится. Но, сначала хочу решит более простые задачи. Самая простая - влоб:

Код: sql
1.
2.
3.
4.
5.
6.
create table dev.tmp_alagaf (id bigint, str varchar(100));

create index ix_tmp_alagaf on dev.tmp_alagaf (str);

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where str = 'test'


Получает

Код: plaintext
1.
2.
3.
4.
Seq Scan on tmp_alagaf  (cost=0.00..1.18 rows=1 width=19) (actual time=0.009..0.009 rows=0 loops=1)
  Filter: (str = 'test'::text)
  Rows Removed by Filter: 14
Planning time: 0.066 ms
Execution time: 0.020 ms

Не вижу индекса. Более сложная тоже не вижу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table dev.tmp_alagaf (id bigint, str varchar(100));

create index ix_tmp_alagaf on dev.tmp_alagaf (lower(str));

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where lower(str) = 'test'

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where lower(str) like 'test%'



Везде план тот же, что и у первого. Почему так?
...
Рейтинг: 0 / 0
Поиск текста по словам по индексу
    #39029698
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey AgafonovВсем привет. Итак есть задача - найти текст по словам по индексу.
Код: sql
1.
select * from table where str like '%text%'

не подходит, так как индекс не подключится. Но, сначала хочу решит более простые задачи. Самая простая - влоб:

Код: sql
1.
2.
3.
4.
5.
6.
create table dev.tmp_alagaf (id bigint, str varchar(100));

create index ix_tmp_alagaf on dev.tmp_alagaf (str);

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where str = 'test'


Получает

Код: plaintext
1.
2.
3.
4.
Seq Scan on tmp_alagaf  (cost=0.00..1.18 rows=1 width=19) (actual time=0.009..0.009 rows=0 loops=1)
  Filter: (str = 'test'::text)
  Rows Removed by Filter: 14
Planning time: 0.066 ms
Execution time: 0.020 ms

Не вижу индекса. Более сложная тоже не вижу:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table dev.tmp_alagaf (id bigint, str varchar(100));

create index ix_tmp_alagaf on dev.tmp_alagaf (lower(str));

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where lower(str) = 'test'

explain  (analyze)
SELECT * FROM dev.tmp_alagaf where lower(str) like 'test%'



Везде план тот же, что и у первого. Почему так?

Вне зависимости от чего либо с каких вообще соображений база должна использовать индекс на таблице в 14 строк?
Там быстрее seq scan ном 1 страницу данных отпарсить.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Поиск текста по словам по индексу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]