Нижеследующий запрос будет быстрее в полуторке или в двойке?:
select di.* , p.price_retail p
from docum_items di, sp_products p
where di.id_product = p.id_product
and di.id_docum in (6,7)
где sp_products это (таблица products содержит десятки тысяч записей):
CREATE PROCEDURE SP_PRODUCTS
RETURNS (
ID_PRODUCT INTEGER,
NAME VARCHAR(30),
FULLNAME VARCHAR(40),
DESCRIPTION VARCHAR(90),
ID_GROUP INTEGER,
PRICE_RETAIL NUMERIC(11,4),
PRICE_RETAIL_VAL NUMERIC(11,4),
NORMA NUMERIC(11,4),
ID_UNIT INTEGER,
SHORTCODE VARCHAR(25),
WARNING SMALLINT,
MAXDISCOUNT NUMERIC(11,4),
ID_USER INTEGER,
DATETIME_CHANGE TIMESTAMP,
NOTE_CHAR CHAR(1),
FLAG INTEGER,
ID_ANALOG INTEGER)
AS
DECLARE VARIABLE ID_REGION INTEGER;
DECLARE VARIABLE RATE NUMERIC(11,4);
BEGIN
select first 1 id_region_our from main_info into :id_region;
FOR SELECT ID_PRODUCT,
NAME,
FULLNAME,
DESCRIPTION,
ID_GROUP,
NORMA,
ID_UNIT,
SHORTCODE,
WARNING,
MAXDISCOUNT,
ID_USER,
DATETIME_CHANGE,
NOTE_CHAR,
FLAG,
ID_ANALOG
FROM PRODUCTS
order by id_product
INTO :ID_PRODUCT,
:NAME,
:FULLNAME,
:DESCRIPTION,
:ID_GROUP,
:NORMA,
:ID_UNIT,
:SHORTCODE,
:WARNING,
:MAXDISCOUNT,
:ID_USER,
:DATETIME_CHANGE,
:NOTE_CHAR,
:FLAG,
:ID_ANALOG
DO
BEGIN
price_retail = 0;
select price_retail from region_prices where id_region=:id_region and
id_product=:id_product into :price_retail;
select rate from SP_GET_RATE((select id_currency_val from
main_info),current_date) into :rate;
if (rate is null) then rate=1;
price_retail_val = price_retail / rate;
SUSPEND;
END
END