Я пытаюсь получить данные таблицы, но это занимает слишком много времени.общая запись составляет 2000 строк ...пожалуйста любой орган дайте решение
CREATE TABLE [dbo].[TRANSDTL]( [fin_year] [nvarchar](4) NOT NULL, [tran_no] [decimal](18, 0) NOT NULL, [tran_dt] [smalldatetime] NULL, [part_no] [nvarchar](20) NOT NULL, [loc_from] [nvarchar](50) NOT NULL, [stor_typ] [nvarchar](2) NOT NULL, [gfin_year] [nvarchar](4) NOT NULL, [giv_no] [decimal](18, 0) NOT NULL, [doc_typ] [nvarchar](2) NOT NULL, [indt_no] [nvarchar](20) NOT NULL, [pack_size] [nvarchar](50) NULL, [tot_qty] [decimal](18, 3) NOT NULL, [SentQty] [decimal](18, 3) NULL, [loc_to] [nvarchar](20) NULL, [CMPY_CD] [int] NOT NULL, [tranType] [nvarchar](3) NOT NULL, [custo_no] [nvarchar](50) NULL, [custo_dt] [datetime] NULL, [AcceptDate] [datetime] NULL, [CheckField] AS (hashbytes('SHA1',(((((CONVERT([nvarchar](10),[giv_no],(0))+CONVERT([nvarchar](20),[part_no],(0)))+[gfin_year])+CONVERT([nvarchar](10),[cmpy_cd],(0)))+CONVERT([char](2),[stor_typ],(0)))+case when rtrim(ltrim([indt_no]))='' then 'a' when [indt_no] IS NULL then 'a' else [indt_no] end)+CONVERT([nvarchar](2),[doc_typ],(0)))), [checkFieldLoc] AS (hashbytes('SHA1',((((((CONVERT([nvarchar](10),[giv_no],(0))+CONVERT([nvarchar](20),[part_no],(0)))+[gfin_year])+CONVERT([nvarchar](10),[cmpy_cd],(0)))+CONVERT([char](2),[stor_typ],(0)))+case when rtrim(ltrim([indt_no]))='' then 'a' when [indt_no] IS NULL then 'a' else [indt_no] end)+CONVERT([nvarchar](2),[doc_typ],(0)))+CONVERT([nvarchar](20),[loc_from],(0)))), [GRate] AS ([dbo].[f_GetGivRate](hashbytes('SHA1',(((((CONVERT([nvarchar](10),[giv_no],(0))+CONVERT([nvarchar](20),[part_no],(0)))+[gfin_year])+CONVERT([nvarchar](10),[cmpy_cd],(0)))+CONVERT([char](2),[stor_typ],(0)))+case when rtrim(ltrim([indt_no]))='' then 'a' when [indt_no] IS NULL then 'a' else [indt_no] end)+CONVERT([nvarchar](2),[doc_typ],(0))))), [checkFieldDC] AS (hashbytes('SHA1',(CONVERT([nvarchar](20),[custo_no],(0))+CONVERT([nvarchar](20),[part_no],(0)))+CONVERT([nvarchar](10),[cmpy_cd],(0)))), [Gin_Rate] [decimal](18, 3) NOT NULL, [Curr_Code] [int] NULL, [Exchange_Rate] [decimal](18, 5) NOT NULL, [CheckFieldStr] AS ((((((CONVERT([nvarchar](10),[giv_no],(0))+CONVERT([nvarchar](20),[part_no],(0)))+[gfin_year])+CONVERT([nvarchar](10),[cmpy_cd],(0)))+CONVERT([char](2),[stor_typ],(0)))+case when rtrim(ltrim([indt_no]))='' then 'a' when [indt_no] IS NULL then 'a' else [indt_no] end)+CONVERT([nvarchar](2),[doc_typ],(0))), [tdoc_typ] [nvarchar](10) NULL, CONSTRAINT [PK_TRANSDTL] PRIMARY KEY CLUSTERED ( [fin_year] ASC, [tran_no] ASC, [part_no] ASC, [loc_from] ASC, [stor_typ] ASC, [gfin_year] ASC, [giv_no] ASC, [doc_typ] ASC, [indt_no] ASC, [CMPY_CD] ASC, [tranType] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[TRANSDTL] ADD CONSTRAINT [DF_TRANSDTL_tot_qty] DEFAULT ((0)) FOR [tot_qty] GO ALTER TABLE [dbo].[TRANSDTL] ADD CONSTRAINT [DF_TRANSDTL_SentQty] DEFAULT ((0)) FOR [SentQty] GO ALTER TABLE [dbo].[TRANSDTL] ADD CONSTRAINT [DF_TRANSDTL_CMPY_CD_1] DEFAULT ((0)) FOR [CMPY_CD] GO ALTER TABLE [dbo].[TRANSDTL] ADD CONSTRAINT [DF_TRANSDTL_Rate] DEFAULT ((0)) FOR [Gin_Rate] GO ALTER TABLE [dbo].[TRANSDTL] ADD CONSTRAINT [DF_TRANSDTL_Exchange_Rate] DEFAULT ((0)) FOR [Exchange_Rate] GO
Что я уже пробовал:
я пытаюсь получить данные таблицы, но это занимает слишком много времени
[no name]
Профилируйте свой запрос и посмотрите, что занимает так много времени, а затем посмотрите, что вы можете сделать, чтобы сократить это время.
Dave Kreskowiak
Вы вызываете HASHBYTES 8000 раз (что дорого сделать один раз!), делаете кучу конвертов, манипуляций со строками и падежами в SQL-запросе и удивляетесь, почему он медленный?
Решение очень простое. Не выполняйте всю эту работу в запросе SELECT. Сделайте это в разделе вставка и / или обновление и сохраните данные по мере необходимости. Сделайте как можно больше работы заранее, прежде чем вам нужно будет использовать эти данные.
Dass Sathiyamoorthi
Спасибо, Мистер Дейв!!
Ваше предложение очень полезно для меня..