Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация SELECT'a / 9 сообщений из 9, страница 1 из 1
12.12.2016, 11:14
    #39364747
archelite
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
Есть таблица

Код: 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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
-- Table: public.tmp_metrics_for_upload

-- DROP TABLE public.tmp_metrics_for_upload;

CREATE TABLE public.tmp_metrics_for_upload
(
  nzp_cr integer,
  nzp_kvar integer,
  num_ls integer,
  nzp_serv integer,
  nzp_cnttype integer,
  num_cnt character varying(40),
  dat_prov date,
  dat_provnext date,
  dat_uchet date,
  val_cnt double precision,
  norma double precision,
  is_actual integer,
  nzp_user integer,
  dat_when date,
  dat_close date,
  cur_unl integer,
  nzp_wp integer,
  ist integer,
  dat_oblom date,
  dat_poch date,
  dat_del date,
  user_del integer,
  nzp_counter integer,
  month_calc date,
  dat_d date,
  dat_po date,
  dat_block timestamp without time zone,
  user_block integer,
  pkod numeric(13,0),
  service character(100),
  val_cnt_max double precision
)
WITH (
  OIDS=TRUE
);
ALTER TABLE public.tmp_metrics_for_upload
  OWNER TO admin;

-- Index: public.nzp_counter_tmp_metrics_for_upload

-- DROP INDEX public.nzp_counter_tmp_metrics_for_upload;

CREATE INDEX nzp_counter_tmp_metrics_for_upload
  ON public.tmp_metrics_for_upload
  USING btree
  (nzp_counter);

-- Index: public.nzp_cr_tmp_metrics_for_upload

-- DROP INDEX public.nzp_cr_tmp_metrics_for_upload;

CREATE INDEX nzp_cr_tmp_metrics_for_upload
  ON public.tmp_metrics_for_upload
  USING btree
  (nzp_cr);



в ней несколько млн. значений, нужно просто выбрать их все для дальнейшей загрузки в DataTable (а потом в файл).
простой SELECT * работает около 15 минут, SELECT с перечислением всех полей еще дольше. Как можно ускорить?
Добавление индексов поможет? если да то на какие поля? И вообще как правильно использовать индексы, сколько их нужно и на какие поля они обычно добавляются?
...
Рейтинг: 0 / 0
12.12.2016, 11:22
    #39364753
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
archelite,

какой размер таблицы в байтах? что значит загрузить в datatable? скорей всего у вас приложение плохо переваривает большое число данных. если нужен экспорт в файл, то делайте его сразу запросом командой copy. индексы для выборки всей таблицы никак не помогут.
...
Рейтинг: 0 / 0
12.12.2016, 11:38
    #39364763
archelite
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
размер 270532608 Б или 258 Мб

нужно сделать выгрузку в файл в какой-нибудь формат удобный для таблиц .XLS, .DBF желательно.

если это можно сделать напрямую из Postgres и работать будет быстрее я только за
...
Рейтинг: 0 / 0
12.12.2016, 12:25
    #39364783
archelite
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
COPY не подойдет, т.к. нет доступа к файловой системе сервера, только запросом получать таблицу, а потом выгружать её в файл
...
Рейтинг: 0 / 0
12.12.2016, 12:51
    #39364797
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
archeliteCOPY не подойдет, т.к. нет доступа к файловой системе сервера, только запросом получать таблицу, а потом выгружать её в файл

Так сделайте psql \copy как вариант.
А как вы 15 минут то засекали? каким методом?

PS: при выборе всей таблицы никакие индексы никогда не помогают.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
12.12.2016, 13:39
    #39364833
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
archelite,

запросом copy можно сохранить например в формат csv. доступ к фс сервера с базой не обязателен, можно использовать psql команду \copy , которая фактически сделает запрос сopy ... to stdout и сохранит результат в локальный файл.
...
Рейтинг: 0 / 0
12.12.2016, 14:22
    #39364882
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
archelite,

интересно, зачем вы используете

service character(100),
...
Рейтинг: 0 / 0
12.12.2016, 14:32
    #39364894
archelite
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
Alexiusarchelite,

запросом copy можно сохранить например в формат csv. доступ к фс сервера с базой не обязателен, можно использовать psql команду \copy , которая фактически сделает запрос сopy ... to stdout и сохранит результат в локальный файл.

Код: sql
1.
\copy public.tmp_metrics_for_upload To 'D:\test.csv' With CSV HEADER 



попробовал составить ругается на слэш

нужен формат ксв, чтобы имена колонок были = именам колонок в таблице и чтобы сохранялось локально
...
Рейтинг: 0 / 0
12.12.2016, 16:46
    #39365082
archelite
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация SELECT'a
бгг, так это в консоль надо было писать, всё разобрался
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Оптимизация SELECT'a / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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