|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
Доброго дня, коллеги. Вопрос по использованию GIN индекса для посика в текстовых данных. Есть таблица логов и в ней столбец LOG_REQUEST, который содержит текст запроса. По этому столбцу построен индекс: Код: sql 1.
При поиске по строке из букв индекс отрабатывает быстро: Код: sql 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
При поиске по строке из цифр индекс отрабатывает очень медленно: Код: sql 1. 2. 3.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Если в запросе используется комбинация букв и цифр, то запрос отрабатывает быстро. Если только цифры - медленно... Может кто сталкивался с подобной проблемой? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2018, 03:49 |
|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
sKot, 1)Full text search индексы вообще не предназначены для ускорения ILIKE/LIKE операций а для полнотекстового поиска это раз 2)для like/ilike нужен триграмный индекс https://www.postgresql.org/docs/10/static/pgtrgm.html что касается разницы по скорости с неподходящим индексом 1)включаете track_io_timing и делаете вместо explain analyze - explain (analyze, costs, buffers, timing) чтобы понять сколько времени у вас на ввод-вывод ушло 2)разница в 14248 строк в первом запросе и в 394736 строк во втором - вам ничего не говорит что второй запрос в 30 раз больше строк отдает и вполне ожидаемо может работать минимум в 30 раз дольше? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2018, 10:11 |
|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
Максим, спасибо! Триграммные индексы в данном случае не подошли, т.к. строка, по которой выполняется поиск может быть до 64kb, поэтому они по 99% записей вообще не строятся... Код: sql 1.
Говорит, но я всё же надеялся, что есть какое-то решение... :( Это таблица логов (~37млн строк), в ней каша из XML, кусков smtp запросов (в т.ч. и в base64) и прочего аналогичного мусора. Хотелось сделать поиск по этим строкам аналогичный триграммному... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 00:16 |
|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
Коллеги, всем спасибо, все свободны :) Открыл для себя опцию "gin_trgm_ops" для индекстов GIN. Построение индекса выглядит так: Код: sql 1.
На табл > 40 млн записей, при объёме столбца LOG_REQUEST > 132 Gb запросы, содержащие LIKE по этому столбцу по любой последовательности символов выполняются < 1 сек. НО! Включение сортировки по любому ( даже индексированному ! полю) увеличивают время выполнения до 60-120 сек! Тему можно считать закрытой. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 00:37 |
|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
sKotКоллеги, всем спасибо, все свободны :) Открыл для себя опцию "gin_trgm_ops" для индекстов GIN. Входит в противоречие с sKotТриграммные индексы в данном случае не подошли, т.к. строка, по которой выполняется поиск может быть до 64kb, поэтому они по 99% записей вообще не строятся... Вы уж там определитесь у себя :). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 09:59 |
|
Поиск по GIN индексу
|
|||
---|---|---|---|
#18+
Maxim BoguksKotКоллеги, всем спасибо, все свободны :) Открыл для себя опцию "gin_trgm_ops" для индекстов GIN. Входит в противоречие с sKotТриграммные индексы в данном случае не подошли, т.к. строка, по которой выполняется поиск может быть до 64kb, поэтому они по 99% записей вообще не строятся... Вы уж там определитесь у себя :). Максим, вы абсолютно правы. Я некорректно сформулировал вопрос в части триграммных индексов: я имел в виду GIST индексы с опцией "gist_trgm_ops". При попытке построения GIST индекса выдавалось сообщение о большой длине строки, и по этим строкам индекс вообще не строился. Про "gin_trgm_ops" я вообще не знал, т.е. я считал, что триграммы - только для GIST. В данном случае противоречие возникло не от злого умысла, а от скудости познаний. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 15:52 |
|
|
start [/forum/moderation_log.php?user_name=asp_fox]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
get settings: |
9ms |
get forum list: |
16ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 1090ms |
total: | 1295ms |
0 / 0 |