Ответы пользователя по тегу Базы данных
  • Поиск по полю с URL в PostgreSQL?

    chudinov
    @chudinov Автор вопроса
    Возникает вопрос: стоит ли разбивать url на части (как этов таблице Б) если простой LIKE %часть урла% работает не сильно дольше (в таблице А)?

    Поиск по таблице А:

    QUERY PLAN

    Limit (cost=0.00..2814.61 rows=100 width=79) (actual time=0.049..1.392 rows=100 loops=1)

    -> Seq Scan on таблица А (cost=0.00..105182.02 rows=3737 width=79) (actual time=0.045..1.109 rows=100 loops=1)

    Filter: (((url)::text ~~ '%job%'::text) AND (date_index > '2011-02-15 19:15:55'::timestamp without time zone) AND (host_id = 7::smallint) AND (bot = '1'::crowler))

    Total runtime: 1.578 ms

    Где же производительность?
    Ответ написан
    Комментировать
  • Поиск по полю с URL в PostgreSQL?

    chudinov
    @chudinov Автор вопроса
    В таблицу добавлено поле bot:: int
    Создаем композитный индекс так как в запросе будут условия
    WHERE «host_id» = '7' //ограничимся указанием конкретного хоста
    AND «path1» = 'job' //поиск по части урла
    AND «date_index» > '2011-02-15 19:15:55' // нужна выборка за период
    AND «bot» = '1' // интересуют только определенные группы
    LIMIT 100 //скорее всего в отчете будет выгрузка части, не более 100

    сам индекс: CREATE INDEX comp_index ON bh_log USING btree (host_id, path1, path2, path3, date_index, bot)

    Запрос:
    EXPLAIN ANALYSE SELECT «path1»,«date_index»,«ip»,«bot» FROM «public».«Таблица Б» WHERE «host_id» = '7' AND «path1» = 'job' AND «date_index» > '2011-02-15 19:15:55' AND «bot» = '1'

    QUERY PLAN

    Bitmap Heap Scan on Таблица Б (cost=2024.09..18513.78 rows=4976 width=27) (actual time=350.746..1127.240 rows=69893 loops=1)

    Recheck Cond: ((host_id = 7::smallint) AND ((path1)::text = 'job'::text) AND (date_index > '2011-02-15 19:15:55'::timestamp without time zone) AND (bot = '1'::crowler))

    -> Bitmap Index Scan on comp_index (cost=0.00..2022.84 rows=4976 width=0) (actual time=326.282..326.282 rows=69893 loops=1)

    Index Cond: ((host_id = 7::smallint) AND ((path1)::text = 'job'::text) AND (date_index > '2011-02-15 19:15:55'::timestamp without time zone) AND (bot = '1'::crowler))

    Total runtime: 1228.862 ms

    Добавляем LIMIT 100

    Запрос: EXPLAIN ANALYSE SELECT «path1»,«date_index»,«ip»,«bot» FROM «public».«Таблица Б» WHERE «host_id» = '7' AND «path1» = 'job' AND «date_index» > '2011-02-15 19:15:55' AND «bot» = '1' LIMIT 100

    QUERY PLAN

    Limit (cost=0.00..394.49 rows=100 width=27) (actual time=0.056..0.896 rows=100 loops=1)

    -> Index Scan using comp_index on Таблица Б (cost=0.00..19629.66 rows=4976 width=27) (actual time=0.053..0.602 rows=100 loops=1)

    Index Cond: ((host_id = 7::smallint) AND ((path1)::text = 'job'::text) AND (date_index > '2011-02-15 19:15:55'::timestamp without time zone) AND (bot = '1'::crowler))

    Total runtime: 1.089 ms

    Есть ошибки?
    Все ли корректно?
    Ответ написан
    Комментировать
  • Поиск по полю с URL в PostgreSQL?

    chudinov
    @chudinov Автор вопроса
    п. 3. На запросе WHERE path3 = 'staic' сейчас:

    QUERY PLAN

    Seq Scan on Таблица Б (cost=0.00..129273.90 rows=337 width=299) (actual time=0.065..1177.217 rows=95 loops=1)

    Filter: ((path3)::text = 'static'::text)

    Total runtime: 1177.476 ms
    Ответ написан