powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с индексами на json поле.
7 сообщений из 7, страница 1 из 1
помогите с индексами на json поле.
    #39407785
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите с индексами на json поле.
    #39408036
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите с индексами на json поле.
    #39408067
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

партиал индекс с включением других полей сделать можно?
...
Рейтинг: 0 / 0
помогите с индексами на json поле.
    #39408070
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпопробуйте ваш запрос сделать в таком виде:
работает, результаты выдает те же.
...
Рейтинг: 0 / 0
помогите с индексами на json поле.
    #39408268
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow, вам проще было проверить самим, чем ждать ответа-)
Код: sql
1.
CREATE INDEX idxpagegindatablablabla ON page USING GIN (_data jsonb_path_ops) where page_type_id = 2;
...
Рейтинг: 0 / 0
помогите с индексами на json поле.
    #39408271
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите с индексами на json поле.
    #39427682
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с индексами на json поле.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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