powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Issue with NOT IN in Firebird 3
6 сообщений из 31, страница 2 из 2
Issue with NOT IN in Firebird 3
    #39513709
FredFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 SELECT
  SHIPPING.PACK_SLIP_NO,
  cast (null as INTEGER) INVOICENO,
  SHIPPING.ORDERNO,
  SHIPPING.SUBORDERNO,
  SHIPPING.DATE_SHIP,
  ORDERS.CUSTNO,
  COMPANY.COMPANY_NAME,
  ORDERS.PURCHASE_ORDER_NO,
  ORDERS_PRODUCT.PART_NO,
  ORDERS_PRODUCT.TOTAL_QTY_SHIP,
  ORDERS_PRODUCT.PRICE,
  ORDERS_PRODUCT.TOTAL_QTY_SHIP*ORDERS_PRODUCT.PRICE AS TOTAL
 FROM ORDERS join SHIPPING on SHIPPING.ORDERNO=ORDERS.ORDERNO   
  join ORDERS_PRODUCT on SHIPPING.ORDERNO=ORDERS_PRODUCT.ORDER_NO
  join COMPANY on ORDERS.CUSTNO=COMPANY.CUST_NO 
 WHERE
  SHIPPING.SUBORDERNO IS NULL AND
  --NOT EXISTS(SELECT 1 FROM INVOICES where INVOICES.ORDERNO = SHIPPING.ORDERNO) AND
  NOT EXISTS(SELECT 1 FROM INVOICES JOIN SHIPPING ON INVOICES.ORDERNO = SHIPPING.ORDERNO) AND
  SHIPPING.DATE_SHIP>=:DATEFROM AND
  SHIPPING.DATE_SHIP<=:DATETO



I tried to replace
SELECT 1 FROM INVOICES where INVOICES.ORDERNO = SHIPPING.ORDERNO
with
SELECT 1 FROM INVOICES JOIN SHIPPING ON INVOICES.ORDERNO = SHIPPING.ORDERNO
but result not the same even runs faster
...
Рейтинг: 0 / 0
Issue with NOT IN in Firebird 3
    #39513726
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамСПМ> железный закон проектировщика - то, что мы считаем,
СПМ> должно быть целого типа, то, что мереям - плавающего.

Замечательно сформулировано. Надо выбить в камне.


На самом деле формулировка не моя. Я это считал всегда само собой разумеющимся, формулировать нужды не было. Запомнил именно как отличную формулировку, прочитав от Елены на яху лет 15 назад. Кстати, я очень рад, что она и жива и всё ещё в строю. Мы много с ней трещали за жизнь в аське, когда я прощался, она сказала - а я вот никогда не сдамся. Замечательная женщина.
...
Рейтинг: 0 / 0
Issue with NOT IN in Firebird 3
    #39513736
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FredFF,

попробуй

Код: sql
1.
CREATE INDEX IDX_INVOICES_ORDERNO ON INVOICES (ORDERNO);



или

Код: sql
1.
CREATE INDEX IDX_INVOICES_ORDERNO ON INVOICES (ORDERNO, SUBORDERNO);
...
Рейтинг: 0 / 0
Issue with NOT IN in Firebird 3
    #39513750
FredFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Thanks Denis very much! After I added the indexes procedure runs like a charm - 1-2 sec! I think Firebird 3 documentation should mention that EXISTS predicate requires to have indexes on fields. IN predicate is not using indexes that's why it's very slow.

You are saver of the day! Thank you very much, Fred
...
Рейтинг: 0 / 0
Issue with NOT IN in Firebird 3
    #39513752
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FredFFСимонов Денис,

Thanks Denis very much! After I added the indexes procedure runs like a charm - 1-2 sec! I think Firebird 3 documentation should mention that EXISTS predicate requires to have indexes on fields. IN predicate is not using indexes that's why it's very slow.

You are saver of the day! Thank you very much, Fred

Nor Exist neither In reqiures indexes. They are requred just by common sense. Imagine you, not server, search records. What will be easy for YOU - find them by 1-2 iterations or scan all table? Multiple this efforts on amount of records in master table and you will be fantastically surprised. IN is a little bit slow because it lifts new instance of index for each element in the list of arguments.
...
Рейтинг: 0 / 0
Issue with NOT IN in Firebird 3
    #39513832
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
There was a greate question: FredFFFB 3 is not optimized for NOT IN queries at all! But result is so small: not enough indexes.

I'm glad to see a positive result. :)

Read about "float" and "union". And what different between "union" and "union all", it is strongly recommended.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Issue with NOT IN in Firebird 3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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