Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с индексами на json поле. / 7 сообщений из 7, страница 1 из 1
20.02.2017, 13:38
    #39407785
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
PostgreSQL 9.5.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE TABLE "public"."page" (
"id" int4 DEFAULT nextval('object_id_seq'::regclass) NOT NULL,
"_data" jsonb,
"added" timestamp(6) DEFAULT now(),
"updated" timestamp(6),
"deleted" timestamp(6),
"disabled" bool DEFAULT false NOT NULL,
"sort_id" int4 DEFAULT 0 NOT NULL,
"url_marker" varchar(1024) COLLATE "default" DEFAULT NULL::character varying,
"object_type_id" int2,
"flags" int4,
"ext_id" varchar COLLATE "default",
"created_by" int4,
"updated_by" int4,
"guid_1c" varchar(64) COLLATE "default",
"region_id" _int4 DEFAULT '{}'::integer[] NOT NULL,
"route_type_id" int2,
"redirect_data" jsonb,
"page_type_id" int2,
"ext_data" jsonb,
"old_data" jsonb,
"old_id" varchar COLLATE "default",
"status_id" int2 DEFAULT 0 NOT NULL,
"external_id" int4,
"sitemap_category_id" int4,
"name" varchar(512) COLLATE "default",
"link_feature_id" int4,
"link_value_id" int4,
"alias_route_type_id" int4,
"alias_object_id" int4,
"uuid" varchar COLLATE "default",
"images_data" jsonb,
"files_data" jsonb
)
INHERITS ("public"."object") 
WITH (OIDS=FALSE)

;
COMMENT ON COLUMN "public"."page"."name" IS 'Название страницы';


CREATE INDEX "page_url_marker_disabled_route_type_id_idx" ON "public"."page" USING btree ("url_marker", "disabled", "route_type_id");


ALTER TABLE "public"."page" ADD PRIMARY KEY ("id");

ALTER TABLE "public"."page" ADD FOREIGN KEY ("link_value_id") REFERENCES "public"."feature_value" ("id") ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE "public"."page" ADD FOREIGN KEY ("link_feature_id") REFERENCES "public"."feature" ("id") ON DELETE RESTRICT ON UPDATE RESTRICT;



Код: sql
1.
select count(*) from page 

= 5805
Код: sql
1.
select count(*) from page WHERE page_type_id = 2

= 541




есть запрос, в котором менется alias_url, остальное всегда одно и тоже.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 SELECT
	*
FROM
	page
WHERE
	page_type_id = 2
AND "_data" #> '{alias_type_id}' = '"url"'
AND "_data" #> '{alias_url }' = '"?"'



можно ли в этой версии Постгреса сделать индекс на JSon?
можно ли в этой версии Постгреса сделать составной индекс на JSon И на page_type_id?
можно ли в этой версии Постгреса сделать частиный индекс, ТОЛЬКО НА поля где page_type_id = 2?

в постгресе я разбираюсь слабо, поэтому желателен текст команды create index.
...
Рейтинг: 0 / 0
20.02.2017, 17:59
    #39408036
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
ScareCrow, у вас jsonb, а не json (есть отличия-)
можно строить индекс gin
но он работает только с операторами ?, ?&, ?| и @>
вы используете #>

попробуйте ваш запрос сделать в таком виде:
Код: sql
1.
AND "_data" @> '{"alias_type_id": "url"}' and "_data"  @> '{"alias_url": "?" }'


и создать индекс
Код: sql
1.
CREATE INDEX idxpagegindatablablabla ON page USING GIN (_data jsonb_path_ops);



по индексам и jsonb сюда https://postgrespro.ru/docs/postgrespro/9.5/datatype-json.html
так же попробуйте это расширение: https://postgrespro.ru/docs/postgrespro/9.5/jsquery.html
...
Рейтинг: 0 / 0
20.02.2017, 18:40
    #39408067
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
Legushka,

партиал индекс с включением других полей сделать можно?
...
Рейтинг: 0 / 0
20.02.2017, 18:41
    #39408070
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
авторпопробуйте ваш запрос сделать в таком виде:
работает, результаты выдает те же.
...
Рейтинг: 0 / 0
21.02.2017, 09:03
    #39408268
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
ScareCrow, вам проще было проверить самим, чем ждать ответа-)
Код: sql
1.
CREATE INDEX idxpagegindatablablabla ON page USING GIN (_data jsonb_path_ops) where page_type_id = 2;
...
Рейтинг: 0 / 0
21.02.2017, 09:05
    #39408271
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
ScareCrow, покажите результат выполнения

очень интересно посмотреть ищет ли реально по новому индексу или нет
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
EXPLAIN (ANALYSE, buffers, VERBOSE)
SELECT
	*
FROM
	page
WHERE
	page_type_id = 2
AND "_data" @> '{"alias_type_id": "url"}' and "_data"  @> '{"alias_url": "?" }'
...
Рейтинг: 0 / 0
27.03.2017, 12:45
    #39427682
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с индексами на json поле.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Bitmap Heap Scan on homeme.page  (cost=12.00..16.02 rows=1 width=43) (actual time=0.022..0.022 rows=0 loops=1)
  Output: url_marker
  Recheck Cond: ((page._data @> '{"alias_type_id": "url"}'::jsonb) AND (page._data @> '{"alias_url": "site/index"}'::jsonb) AND (page.page_type_id = 2) AND (NOT page.disabled))
  Filter: (page.deleted IS NULL)
  Buffers: shared hit=5
  ->  Bitmap Index Scan on url_php_29_idx  (cost=0.00..12.00 rows=1 width=0) (actual time=0.020..0.020 rows=0 loops=1)
        Index Cond: ((page._data @> '{"alias_type_id": "url"}'::jsonb) AND (page._data @> '{"alias_url": "site/index"}'::jsonb))
        Buffers: shared hit=5
Planning time: 0.089 ms
Execution time: 0.043 ms
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с индексами на json поле. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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