Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 эквивалентность запросов  [new]
beg_inner
Guest
имеетя запрос, к-ый перестал выполняться в разумное время.
т.е. вообще за сутки не выпоняется, хотя в нем нет cross join-ов,
участвуют всего 2 вью, одно из к-ых смотрит в другую базу, на к-ую есть только CONNECT и SELECT.
переписала запрос, разбив на 2, за 5 минут выполняется.
по логике мне кажется, что делает то же самое, но мало ли что кажется.
решила скопировать данные обоих вью себе на локальный сервер,
хотя бы запустить оба варианта и сравнить результаты.
итого у меня 2 таблицы(на рабочем сервере они вьюхи):

dbo.v_rapporti_storici_xrapp -- 4.404.765 rows
dbo.legprati -- 1.940.769 rows

мой запрос снова за 5 минут отрабатывает,
а изначальный запустила вчера, сегодня он все еще не отработал, т.е. снова уже сутки.
конечно мой комп дохловатый, но это какой-то бред, выполнять такой запрос более 24 часов.
пмогите пожалуйста разобраться:
эквивалентно ли переписала и почему так долго выполняется исходный.

исходный запрос:
+
SELECT  DISTINCT   
		r.num_prat, 
		r.bb12_idbanca, 
		r.bb12_ndg, 
		r.cod_portafoglio, 
		r.tipopratic, 
		r.bb12_idrapporto, 
		ISNULL(r.utiliz_acq_i, 0) + ISNULL(r.utiliz_acq_c, 0) AS credito_conferito, 
		r.bb12_idrapp_or, 
		--r.bb12_for_tecn, 
		--r.bb12_for_tecn_mvb, 
		--r.bb12_tipofortecn, 
		r.BB12_data_revoca, 
		r.bb12_data_ult_agg, 
		r.dataricman, 
		r.utiliz_acq_i, 
		r.utiliz_acq_c, 
		r.cred_cap_i, 
		r.cred_cap_c, 
		r.prezzo_acquis_i, 
		r.prezzo_acquis_c, 
		r.esitocert, 
		r.perdit_contab_i, 
		r.perdit_contab_c, 
		r.perdit_con_cp_i, 
		r.perdit_con_cp_c, 
		r.perdit_con_in_i, 
		r.perdit_con_in_c, 
		r.cap_contratto_i, 
		r.cap_contratto_c, 
		r.int_contratto_i, 
		r.int_contratto_c, 
		r.int_cor_mat_a_i, 
		r.int_cor_mat_a_c, 
		r.int_cor_mat_d_i, 
		r.int_cor_mat_d_c, 
		r.rate_arretrat_i, 
		r.rate_arretrat_c
into dbo.TAB_Cruscotto_Conferimento_1_T_c

FROM  dbo.v_rapporti_storici_xrapp r INNER JOIN dbo.legprati l 
         ON r.num_prat = l.NUM_PRAT 
		AND r.bb12_idbanca = l.IDBanca 
		AND r.bb12_ndg = l.NDG 
		AND r.cod_portafoglio = l.cod_portafoglio 
		AND r.tipopratic = l.TIPOPRATIC
WHERE     (r.dataricman =
                          (SELECT     MAX(dataricman)
                            FROM          v_rapporti_storici_xrapp
                            WHERE      BB12_IDBANCA = l.idbanca AND BB12_NDG = l.ndg AND 
                            cod_portafoglio = l.cod_portafoglio AND tipopratic = l.tipopratic))


моя переработка:
+
SELECT  --distinct
        r.num_prat, 
		r.bb12_idbanca, 
		r.bb12_ndg, 
		r.cod_portafoglio, 
		r.tipopratic, 
		r.bb12_idrapporto, 
		ISNULL(r.utiliz_acq_i, 0) + ISNULL(r.utiliz_acq_c, 0) AS credito_conferito, 
		r.bb12_idrapp_or, 
		--r.bb12_for_tecn, 
		--r.bb12_for_tecn_mvb, 
		--r.bb12_tipofortecn, 
		r.BB12_data_revoca, 
		r.bb12_data_ult_agg,
		 
		r.dataricman,
		MAX(r.dataricman) over (partition by r.BB12_IDBANCA, r.BB12_NDG, r.cod_portafoglio, r.tipopratic) as max_dataricman,
        
		r.utiliz_acq_i, 
		r.utiliz_acq_c, 
		r.cred_cap_i, 
		r.cred_cap_c, 
		r.prezzo_acquis_i, 
		r.prezzo_acquis_c, 
		r.esitocert, 
		r.perdit_contab_i, 
		r.perdit_contab_c, 
		r.perdit_con_cp_i, 
		r.perdit_con_cp_c, 
		r.perdit_con_in_i, 
		r.perdit_con_in_c, 
		r.cap_contratto_i, 
		r.cap_contratto_c, 
		r.int_contratto_i, 
		r.int_contratto_c, 
		r.int_cor_mat_a_i, 
		r.int_cor_mat_a_c, 
		r.int_cor_mat_d_i, 
		r.int_cor_mat_d_c, 
		r.rate_arretrat_i, 
		r.rate_arretrat_c
into dbo.TAB_Cruscotto_Conferimento_1_T_a
FROM    v_rapporti_storici_xrapp r;

select distinct
        r.num_prat, 
		r.bb12_idbanca, 
		r.bb12_ndg, 
		r.cod_portafoglio, 
		r.tipopratic, 
		r.bb12_idrapporto, 
		ISNULL(r.utiliz_acq_i, 0) + ISNULL(r.utiliz_acq_c, 0) AS credito_conferito, 
		r.bb12_idrapp_or, 
		--r.bb12_for_tecn, 
		--r.bb12_for_tecn_mvb, 
		--r.bb12_tipofortecn, 
		r.BB12_data_revoca, 
		r.bb12_data_ult_agg,
		 
		r.dataricman,
        
		r.utiliz_acq_i, 
		r.utiliz_acq_c, 
		r.cred_cap_i, 
		r.cred_cap_c, 
		r.prezzo_acquis_i, 
		r.prezzo_acquis_c, 
		r.esitocert, 
		r.perdit_contab_i, 
		r.perdit_contab_c, 
		r.perdit_con_cp_i, 
		r.perdit_con_cp_c, 
		r.perdit_con_in_i, 
		r.perdit_con_in_c, 
		r.cap_contratto_i, 
		r.cap_contratto_c, 
		r.int_contratto_i, 
		r.int_contratto_c, 
		r.int_cor_mat_a_i, 
		r.int_cor_mat_a_c, 
		r.int_cor_mat_d_i, 
		r.int_cor_mat_d_c, 
		r.rate_arretrat_i, 
		r.rate_arretrat_c
into dbo.TAB_Cruscotto_Conferimento_1_T_b
FROM    dbo.TAB_Cruscotto_Conferimento_1_T_a r
where exists (select 1 from dbo.legprati l 
                    WHERE  r.BB12_IDBANCA = l.idbanca 
                       AND r.BB12_NDG = l.ndg 
                       AND r.cod_portafoglio = l.cod_portafoglio 
                       AND r.tipopratic = l.tipopratic)
      and 		r.dataricman = r.max_dataricman


скрипт таблиц:
CREATE TABLE [dbo].[legprati](
	[NUM_PRAT] [int] NOT NULL,
	[IDBanca] [int] NOT NULL,
	[cod_portafoglio] [int] NOT NULL,
	[NDG] [char](16) NOT NULL,
	[TIPOPRATIC] [int] NOT NULL,
	[DATACARICO] [datetime] NULL,
	[CONTROP] [nvarchar](250) NOT NULL,
	[ARRICCHIM] [bit] NOT NULL,
	[DATAARRICC] [datetime] NULL,
	[SCANNERIZZ] [bit] NOT NULL,
	[DATASCANNE] [datetime] NULL,
	[DATAOFFMAN] [datetime] NULL,
	[DATARICMAN] [datetime] NULL,
	[DATAACCMAN] [datetime] NULL,
	[DATAOFFCES] [datetime] NULL,
	[DATAACCCES] [datetime] NULL,
	[DAARCHIVIARE] [int] NOT NULL,
	[DATADAARCHIV] [datetime] NULL,
	[COLLOCAZIONE] [ntext] NULL,
	[CODRESPINT] [int] NOT NULL,
	[ARCHIVIATA] [bit] NOT NULL,
	[DATAARCHIV] [datetime] NULL,
	[REVOCATA] [bit] NOT NULL,
	[DATAREVOCA] [datetime] NULL,
	[NONREVOCABILE_AL_GESTORE] [bit] NOT NULL,
	[NOTE] [ntext] NULL,
	[CODUTENTE] [int] NOT NULL,
	[DATAULTMOD] [datetime] NOT NULL,
	[ndg_integer] [numeric](16, 0) NULL,
	[livello_tra_collegate] [int] NOT NULL,
	[cod_grappolo] [int] NOT NULL,
	[ndg_orig] [char](16) NULL,
	[cod_fm_mandante] [char](3) NULL,
	[timestamp] [timestamp] NULL,
	[DISABLE_BLOCCHI] [bit] NOT NULL,
	[DISABLE_BLOCCHI_DATA] [datetime] NULL,
	[data_revoca_fidi] [datetime] NULL,
	[NONRIALLOCABILE] [bit] NOT NULL,
	[data_apertura_inc] [datetime] NULL,
	[PRIVACY_PRAT] [bit] NOT NULL,
	[ndg_cessionario] [char](16) NULL,
	[codanagraf_cessionario] [int] NULL,
	[cod_lotto] [int] NOT NULL,
	[data_congelamento] [datetime] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

CREATE TABLE [dbo].[v_rapporti_storici_xrapp](
	[num_prat] [int] NULL,
	[bb12_idbanca] [int] NULL,
	[bb12_ndg] [char](16) NULL,
	[bb12_idrapporto] [char](21) NULL,
	[bb12_idrapp_or] [char](21) NULL,
	[bb12_for_tecn] [varchar](10) NULL,
	[bb12_for_tecn_mvb] [varchar](10) NULL,
	[bb12_tipofortecn] [char](1) NULL,
	[BB12_data_revoca] [datetime] NULL,
	[bb12_data_ult_agg] [datetime] NULL,
	[dataricman] [datetime] NULL,
	[utiliz_acq_i] [money] NULL,
	[utiliz_acq_c] [money] NULL,
	[cred_cap_i] [money] NULL,
	[cred_cap_c] [money] NULL,
	[prezzo_acquis_i] [money] NULL,
	[prezzo_acquis_c] [money] NULL,
	[esitocert] [money] NULL,
	[perdit_contab_i] [money] NULL,
	[perdit_contab_c] [money] NULL,
	[perdit_con_cp_i] [money] NULL,
	[perdit_con_cp_c] [money] NULL,
	[perdit_con_in_i] [money] NULL,
	[perdit_con_in_c] [money] NULL,
	[cap_contratto_i] [money] NULL,
	[cap_contratto_c] [money] NULL,
	[int_contratto_i] [money] NULL,
	[int_contratto_c] [money] NULL,
	[int_cor_mat_a_i] [money] NULL,
	[int_cor_mat_a_c] [money] NULL,
	[int_cor_mat_d_i] [money] NULL,
	[int_cor_mat_d_c] [money] NULL,
	[rate_arretrat_i] [money] NULL,
	[rate_arretrat_c] [money] NULL,
	[cod_portafoglio] [int] NOT NULL,
	[tipopratic] [int] NOT NULL
) ON [PRIMARY]
21 май 13, 13:35    [14326456]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
beg_inner,

На таблицах есть индексы?
21 май 13, 13:39    [14326477]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
1.Планы посмотрите
2. dbo.v_rapporti_storici_xrapp - что в етом вью ?
3. Я б ,скорее всего обьединил бы dbo.legprati + MAX(dataricman) ,все равно,что одно что другое ето фильтр
4. v_rapporti_storici_xrapp -что там ?
21 май 13, 13:40    [14326484]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Maxx
1.Планы посмотрите
2. dbo.v_rapporti_storici_xrapp - что в етом вью ?
3. Я б ,скорее всего обьединил бы dbo.legprati + MAX(dataricman) ,все равно,что одно что другое ето фильтр
4. v_rapporti_storici_xrapp -что там ?


Это не вью) просто так назвали табличку) Скрипт на создание у ТС приложен.
21 май 13, 13:43    [14326500]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Сергей Викт.,

а тогда +1 к вашему вопросу
21 май 13, 13:43    [14326506]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
beg_inner
эквивалентно ли переписала

Это только вы можете сказать. Кто же еще знает, какой результат вы хотели получить и какой получиили ?

beg_inner
почему так долго выполняется исходный.

Наверное когда "решила скопировать данные обоих вью себе на локальный сервер,", то ни одного индекса не создали ? И сервер должен лопатить миллионы записей через полное сканирование
21 май 13, 13:44    [14326507]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Наличие DISTINCT в запросе говорит о неправильном проектировании базы
или неправильном запросе (в смысле связывания таблиц, представлений и пр.)
Неужели запрос без DISTINCT выдаёт полностью идентичные строки?
В чём причина?

Кстати, Вы про первичные ключи слышали что-нибудь?
21 май 13, 13:52    [14326572]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
оба вью имеют вид:

select *
from db1.t1
union all
select *
from db_ark.t1


в db1 я db_owner,
в db_ark лежат архивные данные той же структуры, что в db1. прав на базу db_ark не имею, только select
согласна, что приходится лопатить,
но менять ничего не могу в db_ark.

почему я не знаю, что должно быть в ответе:
ну потому, что автор запроса давно тут не работает,
а мне поручили, чтоб сие, увиденное мной в первый раз, прекратило на сутки(или более) уходить в кому.

что вообще с этим можно сделать?
создать индекс в своей тестовой копии, чтоб хотя бы сравнить ответы?

сейчас посмотрю индексы, но там черт ногу сломит,
в юнионе тоже объединение вьюх, а не таблиц
21 май 13, 14:00    [14326660]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
beg_inner
оба вью имеют вид:

select *
from db1.t1
union all
select *
from db_ark.t1


в db1 я db_owner,
в db_ark лежат архивные данные той же структуры, что в db1. прав на базу db_ark не имею, только select
согласна, что приходится лопатить,
но менять ничего не могу в db_ark.

почему я не знаю, что должно быть в ответе:
ну потому, что автор запроса давно тут не работает,
а мне поручили, чтоб сие, увиденное мной в первый раз, прекратило на сутки(или более) уходить в кому.

что вообще с этим можно сделать?
создать индекс в своей тестовой копии, чтоб хотя бы сравнить ответы?

сейчас посмотрю индексы, но там черт ногу сломит,
в юнионе тоже объединение вьюх, а не таблиц


Конечно посмотреть индексную структуру для начала.
21 май 13, 14:02    [14326677]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
на обеих вьюхах индексы отсутствуют,
имеются на базовых таблицах:

вот определение одного вью:
CREATE VIEW dbo.legprati as select * from CORESQL7.dbo.legprati UNION ALL select * from CORESQL7ARK.dbo.legprati;

на каждой таблице из юниона есть след. индексы:

+
CREATE TABLE [dbo].[legprati](
	[NUM_PRAT] [int] IDENTITY(1,1) NOT NULL,
	[IDBanca] [int] NOT NULL,
	[cod_portafoglio] [int] NOT NULL,
	[NDG] [char](16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[TIPOPRATIC] [int] NOT NULL,
	[DATACARICO] [datetime] NULL,
	[CONTROP] [nvarchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
	[ARRICCHIM] [bit] NOT NULL,
	[DATAARRICC] [datetime] NULL,
	[SCANNERIZZ] [bit] NOT NULL,
	[DATASCANNE] [datetime] NULL,
	[DATAOFFMAN] [datetime] NULL,
	[DATARICMAN] [datetime] NULL,
	[DATAACCMAN] [datetime] NULL,
	[DATAOFFCES] [datetime] NULL,
	[DATAACCCES] [datetime] NULL,
	[DAARCHIVIARE] [int] NOT NULL,
	[DATADAARCHIV] [datetime] NULL,
	[COLLOCAZIONE] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[CODRESPINT] [int] NOT NULL,
	[ARCHIVIATA] [bit] NOT NULL,
	[DATAARCHIV] [smalldatetime] NULL,
	[REVOCATA] [bit] NOT NULL,
	[DATAREVOCA] [datetime] NULL,
	[NONREVOCABILE_AL_GESTORE] [bit] NOT NULL,
	[NOTE] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[CODUTENTE] [int] NOT NULL,
	[DATAULTMOD] [smalldatetime] NOT NULL,
	[ndg_integer] [decimal](16, 0) NULL,
	[livello_tra_collegate] [int] NOT NULL,
	[cod_grappolo] [int] NOT NULL,
	[ndg_orig] [char](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[cod_fm_mandante] [char](3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[timestamp] [timestamp] NULL,
	[DISABLE_BLOCCHI] [bit] NOT NULL,
	[DISABLE_BLOCCHI_DATA] [datetime] NULL,
	[data_revoca_fidi] [datetime] NULL,
	[NONRIALLOCABILE] [bit] NOT NULL,
	[data_apertura_inc] [datetime] NULL,
	[PRIVACY_PRAT] [bit] NOT NULL,
	[ndg_cessionario] [char](16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
	[codanagraf_cessionario] [int] NULL,
	[cod_lotto] [int] NOT NULL,
	[data_congelamento] [datetime] NULL,
 CONSTRAINT [PK_legprati] PRIMARY KEY CLUSTERED 
(
	[NUM_PRAT] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO


USE [CORESQL7]
/****** Object:  Index [IDX_MultiFileGroup_legprati]    Script Date: 05/21/2013 12:15:56 ******/
CREATE NONCLUSTERED INDEX [IDX_MultiFileGroup_legprati] ON [dbo].[legprati] 
(
	[PRIVACY_PRAT] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [ups_STATO]([PRIVACY_PRAT])
GO


USE [CORESQL7]
/****** Object:  Index [IX_codbanca]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_codbanca] ON [dbo].[legprati] 
(
	[IDBanca] ASC,
	[NDG] ASC,
	[TIPOPRATIC] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_CODRESPINT]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_CODRESPINT] ON [dbo].[legprati] 
(
	[CODRESPINT] ASC,
	[IDBanca] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [ix_codrespint_privacy]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [ix_codrespint_privacy] ON [dbo].[legprati] 
(
	[CODRESPINT] ASC,
	[PRIVACY_PRAT] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_legprati]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_legprati] ON [dbo].[legprati] 
(
	[cod_grappolo] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_legprati_1]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_legprati_1] ON [dbo].[legprati] 
(
	[DATAULTMOD] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI10]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI10] ON [dbo].[legprati] 
(
	[NDG] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI11]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI11] ON [dbo].[legprati] 
(
	[ndg_integer] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI12]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI12] ON [dbo].[legprati] 
(
	[cod_portafoglio] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI13]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI13] ON [dbo].[legprati] 
(
	[TIPOPRATIC] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI14]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI14] ON [dbo].[legprati] 
(
	[DATARICMAN] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_legprati20]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_legprati20] ON [dbo].[legprati] 
(
	[DAARCHIVIARE] ASC,
	[NUM_PRAT] ASC,
	[IDBanca] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_legprati21]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_legprati21] ON [dbo].[legprati] 
(
	[DATADAARCHIV] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [ix_legprati22]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [ix_legprati22] ON [dbo].[legprati] 
(
	[IDBanca] ASC,
	[ndg_orig] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI3]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI3] ON [dbo].[legprati] 
(
	[CONTROP] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI4]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI4] ON [dbo].[legprati] 
(
	[DATACARICO] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI7]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI7] ON [dbo].[legprati] 
(
	[DATAOFFMAN] ASC,
	[ARCHIVIATA] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [IX_LEGPRATI9]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [IX_LEGPRATI9] ON [dbo].[legprati] 
(
	[DATAARCHIV] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [Legprati_IX]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [Legprati_IX] ON [dbo].[legprati] 
(
	[IDBanca] ASC,
	[NUM_PRAT] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 100) ON [PRIMARY]
GO


USE [CORESQL7]
/****** Object:  Index [legprati14]    Script Date: 05/21/2013 12:15:57 ******/
CREATE NONCLUSTERED INDEX [legprati14] ON [dbo].[legprati] 
(
	[ARCHIVIATA] ASC,
	[DATAOFFMAN] ASC,
	[NUM_PRAT] ASC,
	[CODRESPINT] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO


второе вью:
CREATE VIEW [dbo].[v_rapporti_storici_xrapp] as select * from CORESQL7.dbo.[v_rapporti_storici_xrapp] union all select * from CORESQL7ARK.dbo.[v_rapporti_storici_xrapp];


одна его часть вот,
вторую не вижу, т.к. нет прав:

+
CREATE view [dbo].[v_rapporti_storici_xrapp] as 
SELECT  rapporti_storici_xrapp_new.[num_prat], [bb12_idbanca], [bb12_ndg], [bb12_idrapporto], 
[bb12_idrapp_or], [bb12_for_tecn], [bb12_for_tecn_mvb], [bb12_tipofortecn], [BB12_data_revoca], 
[bb12_data_ult_agg], rapporti_storici_xrapp_new.[dataricman], [utiliz_acq_i], [utiliz_acq_c], 
[cred_cap_i], [cred_cap_c], [prezzo_acquis_i], [prezzo_acquis_c], [esitocert], [perdit_contab_i], 
[perdit_contab_c], [perdit_con_cp_i], [perdit_con_cp_c], [perdit_con_in_i], 
[perdit_con_in_c], [cap_contratto_i], [cap_contratto_c], [int_contratto_i], 
[int_contratto_c], [int_cor_mat_a_i], [int_cor_mat_a_c], [int_cor_mat_d_i], 
[int_cor_mat_d_c], [rate_arretrat_i], [rate_arretrat_c], rapporti_storici_xrapp_new.[cod_portafoglio], 
rapporti_storici_xrapp_new.[tipopratic]
from rapporti_storici_xrapp_new, bad0rapporti, legprati
where  legprati.idbanca=bb12_idbanca and legprati.ndg=bb12_ndg
and bb10_idbanca=bb12_idbanca and bb10_ndg=bb12_ndg and bb10_idrapporto=bb12_idrapporto

-- modifica del 18/07/2006 per la gestione delle date del data prop
--  and isnull(bb10_data_estinz,'99991231')>=isnull(dataoffman,'99991231')
and isnull(case when bb10_data_estinz = '18000101' then null else bb10_data_estinz end,'99991231')>=isnull(dataoffman,'99991231')  

-- -------------------------------------------------------------------
-- Escludere dal calcolo del saldo conferito delle pratiche Unicredit Spa (banca 902) gli eventuali rapporti ceduti ad ASPRA che si sono impilati perchè la data conferimento era inferiore alla data di cessione.
-- Modifica Grieco del 06/12/2010
-- Richiesta Verdolin 19/11/2010
-- Soluzione indicata da Corrà il 03/12/2010: I rapporti di banca 902 con data estinzione 1/11/08 (Domenica) sono quelli da escludere.
and (bb10_idbanca <> 902 or isNull(bb10_data_estinz, '99991231') <> '20081101') 
-- Richiesta Corr&#224; del 21/03/2012: Eliminata condizione su banca 902 (solo sui portafogli SOF) che prevedeva di estrarre solo i rapporti coerenti con il segmento del portafoglio		
-- Richiesta Verdolin/Corr&#224; del 24/04/2012: Eliminati su banca 902 i rapporti incagli se presenti i relativi rapporti a sofferenza		
-- -------------------------------------------------------------------

--and ( bb12_idbanca not in (901,83,86,67)
--Corr&#224; 22/2/2011: aggiungo alla seguente riga le banche: 41, 61, 84, per correggere un errore nel credito conferito (raddoppiato)
--and ( bb12_idbanca not in (901,83,86,52,902) --One4C	--Corr&#224; 20/03/2009: sostituito idbanca 67 con 52 per migrazione SQ->UR
--13/07/2012 - MACELLONI - Cartolarizzazione C0
--and ( bb12_idbanca not in (901,83,86,52,902,41,61,84) 
and ( bb12_idbanca not in ( select * from dbo.getCollegateFromPrincipale('901,83,86,52,902,41,61,84') ) 
--Corr&#224; 22/2/2011: fine

or exists (
select * from
  bad0decodifiche, collegamenti_contratto_portafoglio 
where bb22_idbanca                                       = rapporti_storici_xrapp_new.bb12_idbanca
  and bb22_cod_tabella                                   = 24
  and bb22_banca_codice                                  = rapporti_storici_xrapp_new.BB12_FOR_TECN
  and collegamenti_contratto_portafoglio.idbanca         = rapporti_storici_xrapp_new.bb12_idbanca
  and collegamenti_contratto_portafoglio.cod_portafoglio = rapporti_storici_xrapp_new.cod_portafoglio
  and collegamenti_contratto_portafoglio.tipo_credito    = left(bb22_param2,3)
)

or exists (
select * from
  collegamenti_contratto_portafoglio 
where collegamenti_contratto_portafoglio.idbanca         = rapporti_storici_xrapp_new.bb12_idbanca
  and collegamenti_contratto_portafoglio.cod_portafoglio = rapporti_storici_xrapp_new.cod_portafoglio
  and collegamenti_contratto_portafoglio.idbanca		 in ( select * from dbo.getCollegateFromPrincipale('902') ) 
  and collegamenti_contratto_portafoglio.tipo_credito    = 'SOF'
  -- INIZIO condizione su richiesta Verdolin/Corr&#224; del 24/04/2012
  and (
		RTrim(rapporti_storici_xrapp_new.BB12_FOR_TECN) not in ('F1I','F1','C1I','C1','FN','C2')
		or not exists (Select 1 
						from rapporti_storici_xrapp_new RAPP_SOFF
						join bad0decodifiche on bb22_idbanca=RAPP_SOFF.bb12_idbanca
											and bb22_cod_tabella=24
											and bb22_banca_codice=RAPP_SOFF.BB12_FOR_TECN
											and bb22_param2='SOF'
						where rapporti_storici_xrapp_new.bb12_idbanca=RAPP_SOFF.bb12_idbanca
						and rapporti_storici_xrapp_new.bb12_ndg=RAPP_SOFF.bb12_ndg
						and rapporti_storici_xrapp_new.dataricman=RAPP_SOFF.dataricman
						and len(rapporti_storici_xrapp_new.BB12_IDRAPPORTO) >= 10
						and len(RAPP_SOFF.BB12_IDRAPP_OR) >= 10
						and right(RTrim(rapporti_storici_xrapp_new.BB12_IDRAPPORTO),10)=right(RTrim(RAPP_SOFF.BB12_IDRAPP_OR),10))
		) 
  -- FINE condizione su richiesta Verdolin/Corr&#224; del 24/04/2012
)

or not exists (
select * from
  bad0decodifiche
where bb22_idbanca                                       = rapporti_storici_xrapp_new.bb12_idbanca
  and bb22_cod_tabella                                   = 24
  and bb22_banca_codice                                  = rapporti_storici_xrapp_new.BB12_FOR_TECN
))


смотреть индексы на входящее в первую часть второго вью таблицы?
(по-моему, дурдом да и только)
21 май 13, 14:26    [14326877]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
beg_inner
на обеих вьюхах индексы отсутствуют,

Разумеется. На представлениях с union индекс вообще создать невозможно.

beg_inner
на каждой таблице из юниона есть след. индексы:

Ну у вас то теперь 2 таблицы, полученные из представлений
21 май 13, 14:31    [14326921]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
От VIEW в спойлере жутковато делается
[dbo].[v_rapporti_storici_xrapp] нормально отрабатывает? Не тормозит?
21 май 13, 14:32    [14326941]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
iap
От VIEW в спойлере жутковато делается
[dbo].[v_rapporti_storici_xrapp] нормально отрабатывает? Не тормозит?
Особенно красиво смотрятся ограничения на RTRIM(), ISNULL(CASE) и т.п.
21 май 13, 14:34    [14326950]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
А судя по комментариям, это кусок какой-то ERP что ли
(индусы, похоже, стараются, заплатки накатывают)
21 май 13, 14:35    [14326964]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
ну я и говорю, свои проиндексировать и сравнить результаты?
сейчас сделаю, только если даже они совпадут, это же не доказательство, что одно и то же делается...

думала, может, "на глаз" кому видно.
вроде логике не особа какая мудреная, не?
legprati нужно только чтоб отфильтровать
(из него же ни одно поле не выбирается),
а записи берутся только те, где дата совпадает с максимальной в группе из
BB12_IDBANCA, BB12_NDG, cod_portafoglio, tipopratic

to iap:
дубли имеются:
запрос с дистинкт возвращает 3670630 строк,
без 3674287.
21 май 13, 14:39    [14326987]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
beg_inner
ну я и говорю, свои проиндексировать и сравнить результаты?

Ну проиндексируете и что дальше ?
На промышленной базе тоже создадите такие две таблицы вместо представлений и будете с ними работать ?
21 май 13, 14:41    [14327010]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
iap,
Вы думаете, это там я вьюхи сочиняю?
мне разрешают что-то _опрашивающее_ это хозяйство переписывать,
и то, если жутко припрет, типа если за сутки не отработает.
это вообще копия продакшена, на к-ый у меня прав нет вообще.
и к-ый никто в жизни не тронет, ибо "что работает, то неприкасаемое".
21 май 13, 14:46    [14327055]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
Glory
beg_inner
ну я и говорю, свои проиндексировать и сравнить результаты?

Ну проиндексируете и что дальше ?
На промышленной базе тоже создадите такие две таблицы вместо представлений и будете с ними работать ?


неа.
я никаких структурных изменений предлагать не могу,
от меня требуется только имеющееся г ускорять.
и если выдает то же самое, но сутки не думает, то типа ура, заработало.

мне надо всего лишь эквивалентно переписать
21 май 13, 14:50    [14327089]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
Glory
Member

Откуда:
Сообщений: 104760
beg_inner
неа.
я никаких структурных изменений предлагать не могу,
от меня требуется только имеющееся г ускорять.
и если выдает то же самое, но сутки не думает, то типа ура, заработало.

мне надо всего лишь эквивалентно переписать

У вас сейчас проблема с получением данных, которые возвращает оригинальный запрос.
Тот который "а изначальный запустила вчера, сегодня он все еще не отработал, т.е. снова уже сутки."
21 май 13, 15:04    [14327193]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
Glory,

уже проверила на скопированных данных.
индекс создала по 4ем полям соединения с датой в инклуде, у себя на локальном.
теперь на моем компе их запрос отработал, но выдал на 19 строк меньше.
буду копать, где в логике ошибка. неэквивалентные запросы :(
21 май 13, 15:20    [14327355]     Ответить | Цитировать Сообщить модератору
 Re: эквивалентность запросов  [new]
beg_inner
Guest
короче, нашла почему у них на 11 строк меньше.
пока переписывала запрос, одно условие потеряла.
у них в соединении было ON r.num_prat = l.NUM_PRAT,
у меня оно должно было в EXISTS перекочевать:
select 1 from dbo.legprati l
WHERE r.num_prat = l.NUM_PRAT
AND ...

добавила, теперь сходится.
пардон за отнятое время
21 май 13, 17:57    [14328974]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить