Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / View с использованием left join. ООоооочень долго / 25 сообщений из 149, страница 1 из 6
15.08.2017, 14:09
    #39505610
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Господа, ну помогите с запросом или объясните, что не так.
Есть 2 таблицы. 1-я с организациями, у которых есть почтовый индекс. (1675 записей)
2-я - БД почтовых индексов России. (46000 примерно записей)
Пишу view:

CREATE VIEW ORG_VIEW (GUID, ORG_NAME, REGION)
AS
SELECT
ORGALLINFO.GUID,
ORGALLINFO.ORGNAME,
d1.REGION
FROM ORGALLINFO
Left join PINDX12 d1 on d1.POSTALCODE=ORGALLINFO.ORGPOSTINDEX
;

После чего выполняю
SELECT COUNT(*) FROM org_view

Запрос выполняется больше 3-х минут.

Где засада?
...
Рейтинг: 0 / 0
15.08.2017, 14:11
    #39505612
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitay,

план запроса где?
...
Рейтинг: 0 / 0
15.08.2017, 14:15
    #39505617
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
LEFT написан сознательно, или "так вышло"?

зы: и почему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.08.2017, 14:18
    #39505619
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Мимопроходящий,

нужны все организации, в которыйх нужно обозначить регион и район
...
Рейтинг: 0 / 0
15.08.2017, 14:18
    #39505620
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Симонов Денис,

Ещеб знать что это такое...
...
Рейтинг: 0 / 0
15.08.2017, 14:20
    #39505624
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
15.08.2017 14:18, tarhitay пишет:
> нужны все организации, в которыйх нужно обозначить регион и район

а шо, у вас есть организации без региона?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.08.2017, 14:22
    #39505627
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Мимопроходящий,

Нет. Но в таблице вбит полный адрес строкой.

В принципе добавил прямо в таблицу регион, район, город.
Но сам факт выполнения запроса в VIEW больше 3-х минут вызывает вопрос: почему?
...
Рейтинг: 0 / 0
15.08.2017, 14:23
    #39505629
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Приведите DDL таблиц ORGALLINFO и PINDX12 (включая индексы).

P.S. Запрос 1675 на 46000 выполнять 3-х минут - это странно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.08.2017, 14:25
    #39505633
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
МимопроходящийLEFT написан сознательно, или "так вышло"?

зы: и почему.


Дошло!!! Спасибо :)
...
Рейтинг: 0 / 0
15.08.2017, 14:27
    #39505637
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Убрал LEFT
Запрос обработался за 1 секунду. Но если есть организация, у которой не указан индекс - ее не будет в выборке. Правильно?
...
Рейтинг: 0 / 0
15.08.2017, 14:29
    #39505639
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Гаджимурадов Рустам,


CREATE TABLE ORGALLINFO
(
GUID Char(36) NOT NULL,
ORGNAME Varchar(255),
ORGPOSTINDEX Varchar(10),
ORGADDRESSFULL Varchar(255),
ORGDIRECTOR Varchar(255),
ORGPHONES Varchar(255),
ORGFAX Varchar(255),
ORGMAIL Varchar(100),
ORGSITE Varchar(100),
ORGTYPEWORK Varchar(255),
ISDELETED Smallint NOT NULL,
REGION Varchar(100),
AUTONOM Varchar(100),
AREA Varchar(100),
CITY Varchar(100),
CITY_1 Varchar(100),
CONSTRAINT PK_ORGALLINFO PRIMARY KEY (GUID)
);
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
ON ORGALLINFO TO SYSDBA WITH GRANT OPTION;


CREATE TABLE ORGALLINFO
(
GUID Char(36) NOT NULL,
ORGNAME Varchar(255),
ORGPOSTINDEX Varchar(10),
ORGADDRESSFULL Varchar(255),
ORGDIRECTOR Varchar(255),
ORGPHONES Varchar(255),
ORGFAX Varchar(255),
ORGMAIL Varchar(100),
ORGSITE Varchar(100),
ORGTYPEWORK Varchar(255),
ISDELETED Smallint NOT NULL,
REGION Varchar(100),
AUTONOM Varchar(100),
AREA Varchar(100),
CITY Varchar(100),
CITY_1 Varchar(100),
CONSTRAINT PK_ORGALLINFO PRIMARY KEY (GUID)
);
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
ON ORGALLINFO TO SYSDBA WITH GRANT OPTION;
...
Рейтинг: 0 / 0
15.08.2017, 14:29
    #39505640
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
15.08.2017 14:27, tarhitay пишет:
> если есть организация, у которой не указан индекс - ее не будет в выборке. Правильно?

да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.08.2017, 14:30
    #39505642
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Мимопроходящий,

А есть какой-то выход, кроме как добавление запроса с выборкой отдельно организаций, у которых нет индекса?
...
Рейтинг: 0 / 0
15.08.2017, 14:31
    #39505644
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
15.08.2017 14:30, tarhitay пишет:
> А есть какой-то выход, кроме как добавление запроса с выборкой отдельно организаций, у которых нет индекса?

а как ты им присвоишь регион, если у них нет индекса?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.08.2017, 14:33
    #39505647
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Мимопроходящий,

Это в принципе не обязательно.
В справочнике есть организации, у которых нет индекса, но есть телефон, адрес (без индекса)
...
Рейтинг: 0 / 0
15.08.2017, 14:34
    #39505650
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Ужас!

Нафига одну и ту же таблицу 2 раза приводить.

Подозреваю что для поля POSTALCODE таблицы PINDX12 индекса нет
...
Рейтинг: 0 / 0
15.08.2017, 14:40
    #39505656
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
Симонов Денис,

Не понял по поводу 2-х таблиц.
В первой таблице дабавил регион, район и т.д., потому что view выполняется очень долго. Изначально их там не было и не планировалось.

Что такое индекс?

P.S. Ну нуб я пока в БД
...
Рейтинг: 0 / 0
15.08.2017, 14:54
    #39505669
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitay,

нужно описание таблицы PINDX12.
...
Рейтинг: 0 / 0
15.08.2017, 15:00
    #39505676
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
KreatorXXItarhitay,

нужно описание таблицы PINDX12.
DDL?
Выше скинул
...
Рейтинг: 0 / 0
15.08.2017, 15:02
    #39505678
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitay,

Вы странный? Где?
...
Рейтинг: 0 / 0
15.08.2017, 15:04
    #39505683
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitay,

бессмыслица полная. условий where не видно ни во view, ни снаружи.
Раз ORGALLINFO Left join
значит из ORGALLINFO будут выбраны все записи.

Какой тогда смысл делать select count по view с джойном, если вместо этого можно выполнить просто select count(*) from orgallinfo ?

А про view... select count вынужден перебирать все записи, попадающие под where или его отсутствие. Значит, в данном случае переберет все из orgallinfo и зачем-то еще посчитает соответствующие из PINDX12.
Еще и таблицы здоровенные (по размеру записей).
...
Рейтинг: 0 / 0
15.08.2017, 15:14
    #39505700
tarhitay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
KreatorXXItarhitay,

Вы странный? Где?

Сори :)

CREATE TABLE PINDX12
(
POSTALCODE Varchar(100),
REGION Varchar(100),
AUTONOM Varchar(100),
AREA Varchar(100),
CITY Varchar(100),
CITY_1 Varchar(100)
);
GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
ON PINDX12 TO SYSDBA WITH GRANT OPTION;
...
Рейтинг: 0 / 0
15.08.2017, 15:17
    #39505704
View с использованием left join. ООоооочень долго
tarhitay,

так попробуй
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE VIEW ORG_VIEW (GUID, ORG_NAME, REGION)
AS
SELECT
ORGALLINFO.GUID,
ORGALLINFO.ORGNAME,
(select d1.REGION from PINDX12 d1 where d1.POSTALCODE=ORGALLINFO.ORGPOSTINDEX)
FROM ORGALLINFO
...
Рейтинг: 0 / 0
15.08.2017, 15:23
    #39505713
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitay,

ну а чего тогда удивляешься медленному времени выполнения. У тебя в PINDX12 нет первичного ключа или хотя бы индекса на POSTALCODE.

Довольно подозрительно что он у вас аж 100 симоволов
...
Рейтинг: 0 / 0
15.08.2017, 15:29
    #39505724
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
View с использованием left join. ООоооочень долго
tarhitayЧто такое индекс?

P.S. Ну нуб я пока в БД

у... как всё запущено.

https://www.firebirdsql.org/file/documentation/reference_manuals/firebird-language-reference-30-rus.pdf
Ну и http://www.ibase.ru раздел статьи
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / View с использованием left join. ООоооочень долго / 25 сообщений из 149, страница 1 из 6
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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