powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индексы, как лучше?
3 сообщений из 3, страница 1 из 1
индексы, как лучше?
    #39175793
kkv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как лучше создавать индексы и почему?

три поля в таблице - три разных индекса
или
три поля в таблице - один индекс на эти три поля?
...
Рейтинг: 0 / 0
индексы, как лучше?
    #39175820
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79,

по-разному может быть. зависит и от запросов и от распределения данных и от размеров таблиц.
...
Рейтинг: 0 / 0
индексы, как лучше?
    #39175903
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kkv79,

настолько всё зависит от целей, что приведу простынку, без пояснений
(она больше про мои задачи и мысли, но и про ваш вопрос)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- генерация
CREATE TABLE test.test  (
	id serial PRIMARY KEY
	,x	numeric
	,y	numeric
	,z numeric)
;
INSERT INTO test.test (x,y,z) SELECT 100*random(),100*random(),100*random() FROM generate_series(1,300000);


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
--индексы
CREATE INDEX ON test.test
USING GIST (point(x,y),point(x,z),point(y,z));

CREATE INDEX ON test.test
(x);
CREATE INDEX ON test.test
(y);
CREATE INDEX ON test.test
(z);




Код: 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.
--тесты
SELECT * FROM test.test WHERE
		x>= 15 AND X<20
 AND	y>= 15 AND y<20
 AND	z>= 15 AND z<20;
-----------------
Bitmap Heap Scan on test  (cost=1175.85..1322.50 rows=40 width=40) (actual rows=35 loops=1)
  Recheck Cond: ((y >= 15::numeric) AND (y < 20::numeric) AND (x >= 15::numeric) AND (x < 20::numeric) AND (z >= 15::numeric) AND (z < 20::numeric))
  Heap Blocks: exact=35
  Buffers: shared hit=35 read=183
  ->  BitmapAnd  (cost=1175.85..1175.85 rows=40 width=0) (actual rows=0 loops=1)
        Buffers: shared read=183
        ->  Bitmap Index Scan on test_y_idx  (cost=0.00..387.04 rows=15062 width=0) (actual rows=15135 loops=1)
              Index Cond: ((y >= 15::numeric) AND (y < 20::numeric))
              Buffers: shared read=61
        ->  Bitmap Index Scan on test_x_idx  (cost=0.00..387.60 rows=15118 width=0) (actual rows=15101 loops=1)
              Index Cond: ((x >= 15::numeric) AND (x < 20::numeric))
              Buffers: shared read=61
        ->  Bitmap Index Scan on test_z_idx  (cost=0.00..400.67 rows=15625 width=0) (actual rows=15272 loops=1)
              Index Cond: ((z >= 15::numeric) AND (z < 20::numeric))
              Buffers: shared read=61
Planning time: 0.236 ms
Execution time: 14.507 ms
-----------------------------

SELECT * FROM test.test WHERE
		POINT(x,Y) >>point(15,0)
AND		POINT(x,Y) <<point(20,0)
AND		POINT(x,Y) >^point(0,15)
AND		POINT(x,Y) <^point(0,20)

AND 
		POINT(x,z) >>point(15,0)
AND		POINT(x,z) <<point(20,0)
AND		POINT(x,z) >^point(0,15)
AND		POINT(x,z) <^point(0,20)
-------------------------------------
Index Scan using test_point_point1_point2_idx on test  (cost=0.34..8.38 rows=1 width=40) (actual rows=35 loops=1)
  Index Cond: ((point((x)::double precision, (y)::double precision) >> '(15,0)'::point) AND (point((x)::double precision, (y)::double precision) << '(20,0)'::point) AND (point((x)::double precision, (y)::double precision) >^ '(0,15)'::point) AND (point((x)::double precision, (y)::double precision) <^ '(0,20)'::point) AND (point((x)::double precision, (z)::double precision) >> '(15,0)'::point) AND (point((x)::double precision, (z)::double precision) << '(20,0)'::point) AND (point((x)::double precision, (z)::double precision) >^ '(0,15)'::point) AND (point((x)::double precision, (z)::double precision) <^ '(0,20)'::point))
  Buffers: shared hit=65
Planning time: 0.261 ms
Execution time: 0.864 ms
-------------------------------------


-- обобщения
хотелось бы GIST(ROW(x,y,z))
(с любыми типами, над которыми определено отношение порядка)
с обобщёнными операторами "<{i}" и ">{i}" где i -- номер измерения.
но и так, тащемто -- сойдёт.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индексы, как лучше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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