powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / какой индекс прикрутить для select по текстовому полю?
11 сообщений из 11, страница 1 из 1
какой индекс прикрутить для select по текстовому полю?
    #33073863
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос
Код: plaintext
select name from item where lower(name)>=lower('<text>')) order by name limit  10 ;
Как построить для name индекс? Первое, что пришло в голову, это
Код: plaintext
create index item_lower_name_ind on item(lower(name) bpchar_pattern_ops);
Но он не помогает.
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33073978
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create index item_lower_name_ind on item(lower(name));

P.S.: bpchar_pattern_ops для запроса name like 'foo%'
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33074233
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовал create index item_lower_name_ind on item(lower(name));
не помогает :(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
EXPLAIN ANALYZE SELECT name from item where lower(name)>=lower('aaa') order by name limit  10 ;
                                                     QUERY PLAN                                                      
---------------------------------------------------------------------------------------------------------------------
 Limit  (cost= 811 . 01 .. 811 . 04  rows= 10  width= 32 ) (actual time= 450 . 015 .. 450 . 041  rows= 10  loops= 1 )
   ->  Sort  (cost= 811 . 01 .. 822 . 85  rows= 4734  width= 32 ) (actual time= 450 . 009 .. 450 . 020  rows= 10  loops= 1 )
         Sort Key: name
         ->  Seq Scan on item  (cost= 0 . 00 .. 522 . 03  rows= 4734  width= 32 ) (actual time= 0 . 039 .. 50 . 652  rows= 13934  loops= 1 )
               Filter: (lower(name) >= 'aaa'::text)
 Total runtime:  450 . 865  ms
Код: plaintext
1.
2.
3.
4.
SELECT count(*) from item;
 count 
-------
  14202 
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33074246
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте order by lower(name)
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33074259
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
огромное спасибо! помогло ;)
Код: plaintext
1.
2.
3.
4.
5.
6.
EXPLAIN ANALYZE SELECT name from item where lower(name)>=lower('aaa') order by lower(name) limit  10 ;
                                                               QUERY PLAN                                                               
----------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost= 0 . 00 .. 2 . 86  rows= 10  width= 32 ) (actual time= 0 . 061 .. 0 . 120  rows= 10  loops= 1 )
   ->  Index Scan using item_lower_name_ind on item  (cost= 0 . 00 .. 1355 . 58  rows= 4734  width= 32 ) (actual time= 0 . 057 .. 0 . 097  rows= 10  loops= 1 )
         Index Cond: (lower(name) >= 'aaa'::text)
 Total runtime:  0 . 201  ms
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33074471
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, еще помогло создание второго индекса для сортировки
Код: plaintext
create index item_name_ind on item(name);
чтоб не делать order by lower(name)
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33075738
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
URIXкстати, еще помогло создание второго индекса для сортировкине понятно. :( киньте explain analyze. :)
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33075747
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat URIXкстати, еще помогло создание второго индекса для сортировкине понятно. :( киньте explain analyze. :)
Код: plaintext
1.
2.
3.
4.
5.
6.
EXPLAIN ANALYZE SELECT name from item where lower(name)>=lower('aaa') order by name limit  10 ;
                                                            QUERY PLAN                                                            
----------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost= 0 . 00 .. 3 . 29  rows= 10  width= 32 ) (actual time= 0 . 070 .. 0 . 125  rows= 10  loops= 1 )
   ->  Index Scan using item_name_ind on item  (cost= 0 . 00 .. 1555 . 23  rows= 4734  width= 32 ) (actual time= 0 . 068 .. 0 . 107  rows= 10  loops= 1 )
         Filter: (lower(name) >= 'aaa'::text)
 Total runtime:  0 . 175  ms
вот индексы:
для условия
Код: plaintext
create index item_lower_name_ind on item(lower(name));
и для сортировки
Код: plaintext
create index item_name_ind on item(name);
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33075752
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или я что-то путаю...
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33075756
URIX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точно, не заметил отсутствие "Index Cond: (lower(name) >= 'aaa'::text)"
...
Рейтинг: 0 / 0
какой индекс прикрутить для select по текстовому полю?
    #33076335
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
угу, Index Scan без Index Cond - это не рулез :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / какой индекс прикрутить для select по текстовому полю?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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