Sql 语句执行耗时较长
Sql Statement Execution Taking a Long Time
我有一个 sql 的声明已经 运行 超过 6 个月了,最近它开始花费过多的时间来执行。
DMIRecord
包含 15,950 行,InHouse_CSV_Backup
包含 149,226 行。我在 MERSMin
和 MERSNUMBER
上分别在它们各自的 table 上设置了索引,并重建了现有索引,但没有帮助。
我有另一个查询做同样的事情,但 DMIRecord
是一个不同的来源 table,称为 'MERSRecord',包含 28,841 行,它运行良好。此查询在 1 秒内运行 returns 2,048 行
任何人都可以给我一些东西来解决这个问题。上次我 运行 下面的查询花了 1 小时 48 分钟 return 15,435 行。
我知道加入并不理想,但这是我们必须处理的问题。没有其他东西可以将这些连接到外部导入的数据源。
SELECT m.*
FROM [MERSReconciliation].[DMIRecord] m
LEFT JOIN [dbo].[InHouse_CSV_Backup] b ON CAST(LTRIM(RTRIM(m.[MERSMin])) AS VARCHAR(31)) = REPLACE(LTRIM(RTRIM(b.[MERSNUMBER)),
'-', '')
WHERE ( ( m.[Resolved] IS NULL
OR m.[Resolved] = 0
)
AND ( m.[Ignore Always] IS NULL
OR m.[Ignore Always] = 0
)
AND ( m.[Ignore] IS NULL
OR m.[Ignore] = 0
)
AND ( m.[Processed] IS NULL
OR m.[Processed] = 0
)
)
AND b.[MERSNUMBER] IS NULL
加入 DMIRecord 的样本数据
100113800001196174
100113800001155030
100113800001204309
加入的样本数据InHouse_CSV_Backup
1001138-0000008482-7
NULL
1001138-0000008479-3
这是坏的和好的执行计划
差:DMIRecords
良好:MERSRecord
我在查询中添加了 *
以简化发布语句。所有需要的列都在实际语句中定义。
USE [ExtraNet]
GO
/****** Object: Table [MERSReconciliation].[DMIRecord] Script Date: 1/29/2015 5:01:35 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [MERSReconciliation].[DMIRecord](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ClientNo] [varchar](300) NULL,
[DetailRecordCtlNo] [varchar](300) NULL,
[ReportingEntityNo] [varchar](300) NULL,
[OrganizationName] [varchar](300) NULL,
[MERSOrgId] [varchar](300) NULL,
[LienPriorityCode] [varchar](300) NULL,
[RealEstateSecurityCode] [varchar](300) NULL,
[FHACaseNo] [varchar](300) NULL,
[InvestLoanNo] [varchar](300) NULL,
[MERSMin] [varchar](300) NULL,
[LoanDate] [varchar](300) NULL,
[OrigMtgAmt] [varchar](300) NULL,
[EntityTypeQual] [varchar](300) NULL,
[NameTypeCode] [varchar](300) NULL,
[MtgrSSNo] [varchar](300) NULL,
[MtgrLastName] [varchar](300) NULL,
[MtgrFirstName] [varchar](300) NULL,
[MtgrMiddleName] [varchar](300) NULL,
[CoEntityTypeQual1] [varchar](300) NULL,
[CoNameTypeCode1] [varchar](300) NULL,
[CoMtgrSSNo1] [varchar](300) NULL,
[CoborrowerLastName1] [varchar](300) NULL,
[CoborrowerFirstName1] [varchar](300) NULL,
[CoborrowerMiddleName1] [varchar](300) NULL,
[CoEntityTypeQual2] [varchar](300) NULL,
[CoNameTypeCode2] [varchar](300) NULL,
[CoMtgrSSNo2] [varchar](300) NULL,
[CoborrowerLastName2] [varchar](300) NULL,
[CoborrowerFirstName2] [varchar](300) NULL,
[CoborrowerMiddleName2] [varchar](300) NULL,
[CoEntityTypeQual3] [varchar](300) NULL,
[CoNameTypeCode3] [varchar](300) NULL,
[CoMtgrSSNo3] [varchar](300) NULL,
[CoborrowerLastName3] [varchar](300) NULL,
[CoborrowerFirstName3] [varchar](300) NULL,
[CoborrowerMiddleName3] [varchar](300) NULL,
[CoEntityTypeQual4] [varchar](300) NULL,
[CoNameTypeCode4] [varchar](300) NULL,
[CoMtgrSSNo4] [varchar](300) NULL,
[CoborrowerLastName4] [varchar](300) NULL,
[CoborrowerFirstName4] [varchar](300) NULL,
[CoborrowerMiddleName4] [varchar](300) NULL,
[CoEntityTypeQual5] [varchar](300) NULL,
[CoNameTypeCode5] [varchar](300) NULL,
[CoMtgrSSNo5] [varchar](300) NULL,
[CoborrowerLastName5] [varchar](300) NULL,
[CoborrowerFirstName5] [varchar](300) NULL,
[CoborrowerMiddleName5] [varchar](300) NULL,
[CoEntityTypeQual6] [varchar](300) NULL,
[CoNameTypeCode6] [varchar](300) NULL,
[CoMtgrSSNo6] [varchar](300) NULL,
[CoborrowerLastName6] [varchar](300) NULL,
[CoborrowerFirstName6] [varchar](300) NULL,
[CoborrowerMiddleName6] [varchar](300) NULL,
[CoEntityTypeQual7] [varchar](300) NULL,
[CoNameTypeCode7] [varchar](300) NULL,
[CoMtgrSSNo7] [varchar](300) NULL,
[CoborrowerLastName7] [varchar](300) NULL,
[CoborrowerFirstName7] [varchar](300) NULL,
[CoborrowerMiddleName7] [varchar](300) NULL,
[CoEntityTypeQual8] [varchar](300) NULL,
[CoNameTypeCode8] [varchar](300) NULL,
[CoMtgrSSNo8] [varchar](300) NULL,
[CoborrowerLastName8] [varchar](300) NULL,
[CoborrowerFirstName8] [varchar](300) NULL,
[CoborrowerMiddleName8] [varchar](300) NULL,
[CoEntityTypeQual9] [varchar](300) NULL,
[CoNameTypeCode9] [varchar](300) NULL,
[CoMtgrSSNo9] [varchar](300) NULL,
[CoborrowerLastName9] [varchar](300) NULL,
[CoborrowerFirstName9] [varchar](300) NULL,
[CoborrowerMiddleName9] [varchar](300) NULL,
[CoEntityTypeQual10] [varchar](300) NULL,
[CoNameTypeCode10] [varchar](300) NULL,
[CoMtgrSSNo10] [varchar](300) NULL,
[CoborrowerLastName10] [varchar](300) NULL,
[CoborrowerFirstName10] [varchar](300) NULL,
[CoborrowerMiddleName10] [varchar](300) NULL,
[NuStreetNo] [varchar](300) NULL,
[NuStreetName] [varchar](300) NULL,
[NuStreetDir] [varchar](300) NULL,
[NuCityName] [varchar](300) NULL,
[NuStateAbbr] [varchar](300) NULL,
[NuPropZip] [varchar](300) NULL,
[NuPropSuffix] [varchar](300) NULL,
[NuPropUnitNo] [varchar](300) NULL,
[County] [varchar](300) NULL,
[MERsMOMflag] [varchar](300) NULL,
[PoolNo] [varchar](300) NULL,
[MERsFundingDate] [varchar](300) NULL,
[MERsOrigOrgId] [varchar](300) NULL,
[OrigNoteHldNm] [varchar](300) NULL,
[MinStatCd] [varchar](300) NULL,
[MERsPropertyPresOrgId] [varchar](300) NULL,
[InvMERsOrgId] [varchar](300) NULL,
[SecuritizationName] [varchar](300) NULL,
[PropertyUnitType] [varchar](300) NULL,
[DateAssignFrMERs] [varchar](300) NULL,
[MERsStatusReasonCode] [varchar](300) NULL,
[OccupancyStatus] [varchar](300) NULL,
[AgencyNbr] [varchar](300) NULL,
[SubservicingMERsOrgId] [varchar](300) NULL,
[Assignee] [varchar](300) NULL,
[AssigneeAddressInfo] [varchar](300) NULL,
[AssigneeCity] [varchar](300) NULL,
[AssigneeState] [varchar](300) NULL,
[AssigneeZipCode] [varchar](300) NULL,
[Assignor] [varchar](300) NULL,
[Resolved] [bit] NULL,
[Ignore Always] [bit] NULL,
[Ignore] [bit] NULL,
[Processed] [bit] NULL,
[ImportedDate] [datetime] NULL,
[ImportedBy] [varchar](50) NULL,
[UpdatedDate] [datetime] NULL,
[UpdatedBy] [varchar](50) NULL,
[F2FResolved] [bit] NULL,
[F2FIgnore Always] [bit] NULL,
[F2FIgnore] [bit] NULL,
[F2FProcessed] [bit] NULL,
[Comment] [varchar](max) NULL,
[F2FComment] [varchar](max) NULL,
CONSTRAINT [PK_DMIRecord] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
USE [ExtraNet]
GO
/****** Object: Table [dbo].[InHouse_CSV_Backup] Script Date: 1/29/2015 5:01:11 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[InHouse_CSV_Backup](
[Loan_ID] [int] IDENTITY(1,1) NOT NULL,
[LOANNUMBER] [float] NULL,
[LOANNUMBE1] [float] NULL,
[MERSNUMBER] [nvarchar](31) NULL,
[LEADID] [float] NULL,
[CALCDATELE] [datetime] NULL,
[PBFIRSTNAM] [nvarchar](26) NULL,
[PBLASTNAME] [nvarchar](36) NULL,
[PBSOCIALSE] [nvarchar](51) NULL,
[PCFIRSTNAM] [nvarchar](26) NULL,
[PCLASTNAME] [nvarchar](36) NULL,
[PBVOICE] [nvarchar](13) NULL,
[PBWORKNUMB] [nvarchar](13) NULL,
[LOANSTATUS] [nvarchar](21) NULL,
[StatusDate] [nvarchar](50) NULL,
[StatusDays] [float] NULL,
[PBCREDITSC] [float] NULL,
[PCCREDITSC] [float] NULL,
[BDETOTAL11] [float] NULL,
[BDETOTAL21] [float] NULL,
[BDETOTAL10] [float] NULL,
[LTV] [float] NULL,
[COMBINEDLT] [float] NULL,
[HOUSINGRAT] [float] NULL,
[DEBTRATIO] [float] NULL,
[PBAGE] [float] NULL,
[PCAGE] [float] NULL,
[BDEYEARSAT] [float] NULL,
[BDEYEARSA1] [float] NULL,
[INVESTOR] [nvarchar](51) NULL,
[PRODUCTCOD] [nvarchar](21) NULL,
[PROGRAMNAM] [nvarchar](51) NULL,
[PROGRAMCAT] [nvarchar](16) NULL,
[LOANPURPOS] [nvarchar](26) NULL,
[DOCUMENTAT] [nvarchar](21) NULL,
[SPPURPOSEO] [nvarchar](51) NULL,
[LIENPOSITI] [nvarchar](16) NULL,
[FUNDINGTYP] [nvarchar](16) NULL,
[SPOCCUPANC] [nvarchar](26) NULL,
[LOANTYPE] [nvarchar](16) NULL,
[SPPROPERTY] [nvarchar](26) NULL,
[RATE] [float] NULL,
[LOANTERM] [float] NULL,
[LOANAMOUNT] [float] NULL,
[LBRANCHNUM] [nvarchar](11) NULL,
[LOEMPLOYEE] [nvarchar](16) NULL,
[LOFIRSTNAM] [nvarchar](26) NULL,
[LOLASTNAME] [nvarchar](36) NULL,
[LPFIRSTNAM] [nvarchar](26) NULL,
[LPLASTNAME] [nvarchar](36) NULL,
[LUFIRSTNAM] [nvarchar](26) NULL,
[LULASTNAME] [nvarchar](36) NULL,
[LEADSOURCE] [nvarchar](31) NULL,
[REFERRALSO] [nvarchar](51) NULL,
[BROKERCOMP] [float] NULL,
[BRCOMPANYN] [nvarchar](51) NULL,
[SELLERREAL] [float] NULL,
[SACOMPANYN] [nvarchar](51) NULL,
[SellerAgenPhone] [nvarchar](50) NULL,
[SABRANCHNA] [nvarchar](26) NULL,
[SAFIRSTNAM] [nvarchar](26) NULL,
[SALASTNAME] [nvarchar](36) NULL,
[ADDRESS] [nvarchar](36) NULL,
[SPCITY] [nvarchar](26) NULL,
[SPSTATE] [nvarchar](3) NULL,
[SPZIP] [nvarchar](11) NULL,
[SPCOUNTY] [nvarchar](21) NULL,
[PBPAADDRES] [nvarchar](36) NULL,
[PBPACITY] [nvarchar](26) NULL,
[PBPASTATE] [nvarchar](3) NULL,
[PBPAZIP] [nvarchar](11) NULL,
[CALCDATEPR] [datetime] NULL,
[CALCDATENO] [datetime] NULL,
[CALCDATEON] [datetime] NULL,
[CALCDATEP1] [datetime] NULL,
[CALCDATEAP] [datetime] NULL,
[CALCDATEP2] [datetime] NULL,
[CALCDATESU] [datetime] NULL,
[CALCDATEA1] [datetime] NULL,
[CALCDATEA2] [datetime] NULL,
[CALCDATEA3] [datetime] NULL,
[CLoanFunded] [datetime] NULL,
[AppraisalReceived] [datetime] NULL,
[CALCDATEES] [datetime] NULL,
[SHIPPED] [datetime] NULL,
[FIRSTPAYME] [datetime] NULL,
[LOCKDATE] [datetime] NULL,
[LOCKEXPIRE] [datetime] NULL,
[CALCDATEDO] [datetime] NULL,
[CALCDATED1] [datetime] NULL,
[CALCDATED2] [datetime] NULL,
[CALCDATEIN] [datetime] NULL,
[CALCDATEFU] [datetime] NULL,
[CLOSEDATE] [datetime] NULL,
[CANCELDATE] [datetime] NULL,
[CALCDATERE] [datetime] NULL,
[CALCDATEI1] [datetime] NULL,
[MONTHLYLOA] [float] NULL,
[TOTALMONTH] [float] NULL,
[ProductID] [float] NULL,
[CPI] [char](10) NULL,
[BrokeredOut] [datetime] NULL,
[Commitment] [varchar](25) NULL,
[Pool] [varchar](25) NULL,
[Points801] [float] NULL,
[Points802] [float] NULL,
[ConfirmedPrice] [float] NULL,
[InvPrice] [float] NULL,
[InvLockDate] [datetime] NULL,
[Units] [float] NULL,
[InvID] [float] NULL,
[Committed_Product] [varchar](50) NULL,
[FloodZone] [char](10) NULL,
[ModBack] [datetime] NULL,
[CommSplitID] [char](10) NULL,
[CommissionSplit] [varchar](50) NULL,
[PropertyClass] [varchar](25) NULL,
[PUDType] [varchar](50) NULL,
[InvBase] [float] NULL,
[LockConfBase] [float] NULL,
[DeedReceivedDate] [datetime] NULL,
[TitleReceivedDate] [datetime] NULL,
[InvestorClearedDate] [datetime] NULL,
[InvestorDeniedDate] [datetime] NULL,
[InvestorSuspendedDate] [datetime] NULL,
[FHACaseNum] [varchar](50) NULL,
[DeniedDate] [datetime] NULL,
[LockCancelled] [datetime] NULL,
[UWRecievedDate] [datetime] NULL,
[UWSuspended] [datetime] NULL,
[ForwardCancelled] [datetime] NULL,
[LeadB2B] [datetime] NULL,
[ServicingBegin] [datetime] NULL,
[ServicingEnd] [datetime] NULL,
[MICertNum] [varchar](50) NULL,
[WareHouseLine] [varchar](50) NULL,
[FirstCreditScoreDate] [datetime] NULL,
[DuplicateFlag] [varchar](50) NULL,
[MinCreditScore] [nchar](10) NULL,
[NMLS_ID] [nchar](10) NULL,
[PQ_ApprovedDate] [datetime] NULL,
[CompletedDate] [datetime] NULL,
[PQ_DeniedDate] [datetime] NULL,
[PQ_WithdrawnDate] [datetime] NULL,
[LeadInactiveDate] [datetime] NULL,
[LoanOriginatedDate] [datetime] NULL,
[IncometeAppDate] [datetime] NULL,
[HOEPAStatus] [nchar](10) NULL,
[FinanceMethod] [varchar](50) NULL,
[IOMonths] [nchar](10) NULL,
[MI_Type] [varchar](50) NULL,
[MI_Activated] [varchar](50) NULL,
[MI_ExpireDate] [datetime] NULL,
[Fee902] [money] NULL,
[Fee1002] [money] NULL,
[HOEPA] [nchar](10) NULL,
[RequiredCreditScore] [nchar](10) NULL,
[ApprovedWithdrawn] [datetime] NULL,
[Withdrawn] [datetime] NULL,
[BranchDenied] [datetime] NULL,
[PQSubmitted] [datetime] NULL,
[Prepay] [nchar](10) NULL,
[CountyCD] [varchar](3) NULL,
[StateCD] [varchar](2) NULL,
[IsTestLoan] [bit] NULL,
[ReqClose_Dt] [date] NULL,
[LockReneg_Dt] [date] NULL,
[PTD_Cond_Count] [int] NULL,
[AdminFee] [varchar](3) NULL,
[PricingTier] [varchar](12) NULL,
[Borr_MidName] [nvarchar](36) NULL,
[CoBorr2_FirstName] [nvarchar](26) NULL,
[CoBorr2_MidName] [nvarchar](36) NULL,
[CoBorr2_LastName] [nvarchar](36) NULL,
[CoBorr2_SSN] [varchar](15) NULL,
[CoBorr2_Address] [nvarchar](36) NULL,
[CoBorr2_City] [nvarchar](26) NULL,
[CoBorr2_State] [varchar](2) NULL,
[CoBorr2_ZIP] [varchar](10) NULL,
[CoBorr2_CredScore] [int] NULL,
[CoBorr3_FirstName] [nvarchar](26) NULL,
[CoBorr3_MidName] [nvarchar](36) NULL,
[CoBorr3_LastName] [nvarchar](36) NULL,
[CoBorr3_SSN] [varchar](15) NULL,
[CoBorr3_Address] [nvarchar](36) NULL,
[CoBorr3_City] [nvarchar](26) NULL,
[CoBorr3_State] [varchar](2) NULL,
[CoBorr3_ZIP] [varchar](10) NULL,
[CoBorr3_CredScore] [int] NULL,
[Created_Dt] [datetime] NULL CONSTRAINT [DF_InHouse_CSV_Backup_Created_Dt] DEFAULT (getdate()),
[LastUpdated_Dt] [datetime] NULL,
[IntentProceed_Dt] [date] NULL,
[ClearClose_Dt] [date] NULL,
[SellerRealtor_ID] [int] NULL,
[BuyerRealtor_ID] [int] NULL,
CONSTRAINT [PK_InHouse_CSV_Backup] PRIMARY KEY NONCLUSTERED
(
[Loan_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
我 运行 调整顾问,它没有提出任何改进建议。
有趣的事情要注意。我回到之前托管这些的原始 SQL 2008 服务器,这两个语句都在 3 秒内执行。两个执行计划是相同的。在 SQL 2012 服务器上,只有 MERSRecord 查询的执行计划是相同的。这三个都与上面列出的匹配。只有 SQL 2012 服务器上的 DMIRecords 不同。可能的错误?
2012 年 1 月 30 日
更新显示我在 dba.stackexchange.com
上的问题的解决方案
将 OPTION (HASH JOIN) 添加到强制散列连接的语句末尾。添加这个导致问题查询在 1 秒内执行并 return 正确的结果集。
使用CTE
清理您的数据。在 JOIN
条件下使用函数将阻止使用索引。
;WITH CteTableA AS(
SELECT
TrimmedCol1 = CAST(LTRIM(RTRIM(m.[COL1])) AS VARCHAR(31)),
Resolved = ISNULL(Resolved, 0),
[Ignore Always] = ISNULL([Ignore Always], 0),
Ignore = ISNULL(Ignore, 0),
Processed = ISNULL(Processed, 0)
FROM TableA
)
,CteTableB AS(
SELECT
*,
TrimmedCol3 = REPLACE(LTRIM(RTRIM(b.[COL3])),'-', '')
FROM TableB
)
SELECT
a.*
FROM CteTableA a
LEFT JOIN CteTableB b
ON b.TrimmedCol3 = a.TrimmedCol1
WHERE
a.Resolved = 0
AND a.[Ignore Always] = 0
AND a.Ignore = 0
AND a.Processed = 0
AND b.ACCOUNTNUMBER IS NULL
编辑:
尝试清理数据并将其插入临时文件 table。然后添加必要的索引。
CREATE TABLE #TempTableA(
TrimmedCol1 VARCHAR(31),
Resolved BIT,
[Ignore Always] BIT,
Ignore BIT,
Processed BIT
-- Other columns you might need
)
CREATE TABLE #TempTableB(
TrimmedCol3 VARCHAR(31),
MERSNUMBER NVARCHAR(31) NULL
-- Other columns you might need
)
INSERT INTO #TempTableA
SELECT
TrimmedCol1 = CAST(LTRIM(RTRIM(m.[COL1])) AS VARCHAR(31)),
Resolved = ISNULL(Resolved, 0),
[Ignore Always] = ISNULL([Ignore Always], 0),
Ignore = ISNULL(Ignore, 0),
Processed = ISNULL(Processed, 0)
FROM TableA
INSERT INTO #TempTableB
SELECT
TrimmedCol3 = REPLACE(LTRIM(RTRIM(b.[COL3])),'-', ''),
MERSNUMBER
FROM TableB
CREATE NONCLUSTERED INDEX #IX_TempTableA ON #TempTableA (TrimmedCol1)
CREATE NONCLUSTERED INDEX #IX_TempTableB ON #TempTableB (TrimmedCol3)
SELECT
a.*
FROM #TempTableA a
LEFT JOIN #TempTableB b
ON b.TrimmedCol3 = a.TrimmedCol1
WHERE
a.Resolved = 0
AND a.[Ignore Always] = 0
AND a.Ignore = 0
AND a.Processed = 0
AND b.MERSNUMBER IS NULL
我有一个 sql 的声明已经 运行 超过 6 个月了,最近它开始花费过多的时间来执行。
DMIRecord
包含 15,950 行,InHouse_CSV_Backup
包含 149,226 行。我在 MERSMin
和 MERSNUMBER
上分别在它们各自的 table 上设置了索引,并重建了现有索引,但没有帮助。
我有另一个查询做同样的事情,但 DMIRecord
是一个不同的来源 table,称为 'MERSRecord',包含 28,841 行,它运行良好。此查询在 1 秒内运行 returns 2,048 行
任何人都可以给我一些东西来解决这个问题。上次我 运行 下面的查询花了 1 小时 48 分钟 return 15,435 行。
我知道加入并不理想,但这是我们必须处理的问题。没有其他东西可以将这些连接到外部导入的数据源。
SELECT m.*
FROM [MERSReconciliation].[DMIRecord] m
LEFT JOIN [dbo].[InHouse_CSV_Backup] b ON CAST(LTRIM(RTRIM(m.[MERSMin])) AS VARCHAR(31)) = REPLACE(LTRIM(RTRIM(b.[MERSNUMBER)),
'-', '')
WHERE ( ( m.[Resolved] IS NULL
OR m.[Resolved] = 0
)
AND ( m.[Ignore Always] IS NULL
OR m.[Ignore Always] = 0
)
AND ( m.[Ignore] IS NULL
OR m.[Ignore] = 0
)
AND ( m.[Processed] IS NULL
OR m.[Processed] = 0
)
)
AND b.[MERSNUMBER] IS NULL
加入 DMIRecord 的样本数据
100113800001196174
100113800001155030
100113800001204309
加入的样本数据InHouse_CSV_Backup
1001138-0000008482-7
NULL
1001138-0000008479-3
这是坏的和好的执行计划
差:DMIRecords
良好:MERSRecord
我在查询中添加了 *
以简化发布语句。所有需要的列都在实际语句中定义。
USE [ExtraNet]
GO
/****** Object: Table [MERSReconciliation].[DMIRecord] Script Date: 1/29/2015 5:01:35 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [MERSReconciliation].[DMIRecord](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ClientNo] [varchar](300) NULL,
[DetailRecordCtlNo] [varchar](300) NULL,
[ReportingEntityNo] [varchar](300) NULL,
[OrganizationName] [varchar](300) NULL,
[MERSOrgId] [varchar](300) NULL,
[LienPriorityCode] [varchar](300) NULL,
[RealEstateSecurityCode] [varchar](300) NULL,
[FHACaseNo] [varchar](300) NULL,
[InvestLoanNo] [varchar](300) NULL,
[MERSMin] [varchar](300) NULL,
[LoanDate] [varchar](300) NULL,
[OrigMtgAmt] [varchar](300) NULL,
[EntityTypeQual] [varchar](300) NULL,
[NameTypeCode] [varchar](300) NULL,
[MtgrSSNo] [varchar](300) NULL,
[MtgrLastName] [varchar](300) NULL,
[MtgrFirstName] [varchar](300) NULL,
[MtgrMiddleName] [varchar](300) NULL,
[CoEntityTypeQual1] [varchar](300) NULL,
[CoNameTypeCode1] [varchar](300) NULL,
[CoMtgrSSNo1] [varchar](300) NULL,
[CoborrowerLastName1] [varchar](300) NULL,
[CoborrowerFirstName1] [varchar](300) NULL,
[CoborrowerMiddleName1] [varchar](300) NULL,
[CoEntityTypeQual2] [varchar](300) NULL,
[CoNameTypeCode2] [varchar](300) NULL,
[CoMtgrSSNo2] [varchar](300) NULL,
[CoborrowerLastName2] [varchar](300) NULL,
[CoborrowerFirstName2] [varchar](300) NULL,
[CoborrowerMiddleName2] [varchar](300) NULL,
[CoEntityTypeQual3] [varchar](300) NULL,
[CoNameTypeCode3] [varchar](300) NULL,
[CoMtgrSSNo3] [varchar](300) NULL,
[CoborrowerLastName3] [varchar](300) NULL,
[CoborrowerFirstName3] [varchar](300) NULL,
[CoborrowerMiddleName3] [varchar](300) NULL,
[CoEntityTypeQual4] [varchar](300) NULL,
[CoNameTypeCode4] [varchar](300) NULL,
[CoMtgrSSNo4] [varchar](300) NULL,
[CoborrowerLastName4] [varchar](300) NULL,
[CoborrowerFirstName4] [varchar](300) NULL,
[CoborrowerMiddleName4] [varchar](300) NULL,
[CoEntityTypeQual5] [varchar](300) NULL,
[CoNameTypeCode5] [varchar](300) NULL,
[CoMtgrSSNo5] [varchar](300) NULL,
[CoborrowerLastName5] [varchar](300) NULL,
[CoborrowerFirstName5] [varchar](300) NULL,
[CoborrowerMiddleName5] [varchar](300) NULL,
[CoEntityTypeQual6] [varchar](300) NULL,
[CoNameTypeCode6] [varchar](300) NULL,
[CoMtgrSSNo6] [varchar](300) NULL,
[CoborrowerLastName6] [varchar](300) NULL,
[CoborrowerFirstName6] [varchar](300) NULL,
[CoborrowerMiddleName6] [varchar](300) NULL,
[CoEntityTypeQual7] [varchar](300) NULL,
[CoNameTypeCode7] [varchar](300) NULL,
[CoMtgrSSNo7] [varchar](300) NULL,
[CoborrowerLastName7] [varchar](300) NULL,
[CoborrowerFirstName7] [varchar](300) NULL,
[CoborrowerMiddleName7] [varchar](300) NULL,
[CoEntityTypeQual8] [varchar](300) NULL,
[CoNameTypeCode8] [varchar](300) NULL,
[CoMtgrSSNo8] [varchar](300) NULL,
[CoborrowerLastName8] [varchar](300) NULL,
[CoborrowerFirstName8] [varchar](300) NULL,
[CoborrowerMiddleName8] [varchar](300) NULL,
[CoEntityTypeQual9] [varchar](300) NULL,
[CoNameTypeCode9] [varchar](300) NULL,
[CoMtgrSSNo9] [varchar](300) NULL,
[CoborrowerLastName9] [varchar](300) NULL,
[CoborrowerFirstName9] [varchar](300) NULL,
[CoborrowerMiddleName9] [varchar](300) NULL,
[CoEntityTypeQual10] [varchar](300) NULL,
[CoNameTypeCode10] [varchar](300) NULL,
[CoMtgrSSNo10] [varchar](300) NULL,
[CoborrowerLastName10] [varchar](300) NULL,
[CoborrowerFirstName10] [varchar](300) NULL,
[CoborrowerMiddleName10] [varchar](300) NULL,
[NuStreetNo] [varchar](300) NULL,
[NuStreetName] [varchar](300) NULL,
[NuStreetDir] [varchar](300) NULL,
[NuCityName] [varchar](300) NULL,
[NuStateAbbr] [varchar](300) NULL,
[NuPropZip] [varchar](300) NULL,
[NuPropSuffix] [varchar](300) NULL,
[NuPropUnitNo] [varchar](300) NULL,
[County] [varchar](300) NULL,
[MERsMOMflag] [varchar](300) NULL,
[PoolNo] [varchar](300) NULL,
[MERsFundingDate] [varchar](300) NULL,
[MERsOrigOrgId] [varchar](300) NULL,
[OrigNoteHldNm] [varchar](300) NULL,
[MinStatCd] [varchar](300) NULL,
[MERsPropertyPresOrgId] [varchar](300) NULL,
[InvMERsOrgId] [varchar](300) NULL,
[SecuritizationName] [varchar](300) NULL,
[PropertyUnitType] [varchar](300) NULL,
[DateAssignFrMERs] [varchar](300) NULL,
[MERsStatusReasonCode] [varchar](300) NULL,
[OccupancyStatus] [varchar](300) NULL,
[AgencyNbr] [varchar](300) NULL,
[SubservicingMERsOrgId] [varchar](300) NULL,
[Assignee] [varchar](300) NULL,
[AssigneeAddressInfo] [varchar](300) NULL,
[AssigneeCity] [varchar](300) NULL,
[AssigneeState] [varchar](300) NULL,
[AssigneeZipCode] [varchar](300) NULL,
[Assignor] [varchar](300) NULL,
[Resolved] [bit] NULL,
[Ignore Always] [bit] NULL,
[Ignore] [bit] NULL,
[Processed] [bit] NULL,
[ImportedDate] [datetime] NULL,
[ImportedBy] [varchar](50) NULL,
[UpdatedDate] [datetime] NULL,
[UpdatedBy] [varchar](50) NULL,
[F2FResolved] [bit] NULL,
[F2FIgnore Always] [bit] NULL,
[F2FIgnore] [bit] NULL,
[F2FProcessed] [bit] NULL,
[Comment] [varchar](max) NULL,
[F2FComment] [varchar](max) NULL,
CONSTRAINT [PK_DMIRecord] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
USE [ExtraNet]
GO
/****** Object: Table [dbo].[InHouse_CSV_Backup] Script Date: 1/29/2015 5:01:11 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[InHouse_CSV_Backup](
[Loan_ID] [int] IDENTITY(1,1) NOT NULL,
[LOANNUMBER] [float] NULL,
[LOANNUMBE1] [float] NULL,
[MERSNUMBER] [nvarchar](31) NULL,
[LEADID] [float] NULL,
[CALCDATELE] [datetime] NULL,
[PBFIRSTNAM] [nvarchar](26) NULL,
[PBLASTNAME] [nvarchar](36) NULL,
[PBSOCIALSE] [nvarchar](51) NULL,
[PCFIRSTNAM] [nvarchar](26) NULL,
[PCLASTNAME] [nvarchar](36) NULL,
[PBVOICE] [nvarchar](13) NULL,
[PBWORKNUMB] [nvarchar](13) NULL,
[LOANSTATUS] [nvarchar](21) NULL,
[StatusDate] [nvarchar](50) NULL,
[StatusDays] [float] NULL,
[PBCREDITSC] [float] NULL,
[PCCREDITSC] [float] NULL,
[BDETOTAL11] [float] NULL,
[BDETOTAL21] [float] NULL,
[BDETOTAL10] [float] NULL,
[LTV] [float] NULL,
[COMBINEDLT] [float] NULL,
[HOUSINGRAT] [float] NULL,
[DEBTRATIO] [float] NULL,
[PBAGE] [float] NULL,
[PCAGE] [float] NULL,
[BDEYEARSAT] [float] NULL,
[BDEYEARSA1] [float] NULL,
[INVESTOR] [nvarchar](51) NULL,
[PRODUCTCOD] [nvarchar](21) NULL,
[PROGRAMNAM] [nvarchar](51) NULL,
[PROGRAMCAT] [nvarchar](16) NULL,
[LOANPURPOS] [nvarchar](26) NULL,
[DOCUMENTAT] [nvarchar](21) NULL,
[SPPURPOSEO] [nvarchar](51) NULL,
[LIENPOSITI] [nvarchar](16) NULL,
[FUNDINGTYP] [nvarchar](16) NULL,
[SPOCCUPANC] [nvarchar](26) NULL,
[LOANTYPE] [nvarchar](16) NULL,
[SPPROPERTY] [nvarchar](26) NULL,
[RATE] [float] NULL,
[LOANTERM] [float] NULL,
[LOANAMOUNT] [float] NULL,
[LBRANCHNUM] [nvarchar](11) NULL,
[LOEMPLOYEE] [nvarchar](16) NULL,
[LOFIRSTNAM] [nvarchar](26) NULL,
[LOLASTNAME] [nvarchar](36) NULL,
[LPFIRSTNAM] [nvarchar](26) NULL,
[LPLASTNAME] [nvarchar](36) NULL,
[LUFIRSTNAM] [nvarchar](26) NULL,
[LULASTNAME] [nvarchar](36) NULL,
[LEADSOURCE] [nvarchar](31) NULL,
[REFERRALSO] [nvarchar](51) NULL,
[BROKERCOMP] [float] NULL,
[BRCOMPANYN] [nvarchar](51) NULL,
[SELLERREAL] [float] NULL,
[SACOMPANYN] [nvarchar](51) NULL,
[SellerAgenPhone] [nvarchar](50) NULL,
[SABRANCHNA] [nvarchar](26) NULL,
[SAFIRSTNAM] [nvarchar](26) NULL,
[SALASTNAME] [nvarchar](36) NULL,
[ADDRESS] [nvarchar](36) NULL,
[SPCITY] [nvarchar](26) NULL,
[SPSTATE] [nvarchar](3) NULL,
[SPZIP] [nvarchar](11) NULL,
[SPCOUNTY] [nvarchar](21) NULL,
[PBPAADDRES] [nvarchar](36) NULL,
[PBPACITY] [nvarchar](26) NULL,
[PBPASTATE] [nvarchar](3) NULL,
[PBPAZIP] [nvarchar](11) NULL,
[CALCDATEPR] [datetime] NULL,
[CALCDATENO] [datetime] NULL,
[CALCDATEON] [datetime] NULL,
[CALCDATEP1] [datetime] NULL,
[CALCDATEAP] [datetime] NULL,
[CALCDATEP2] [datetime] NULL,
[CALCDATESU] [datetime] NULL,
[CALCDATEA1] [datetime] NULL,
[CALCDATEA2] [datetime] NULL,
[CALCDATEA3] [datetime] NULL,
[CLoanFunded] [datetime] NULL,
[AppraisalReceived] [datetime] NULL,
[CALCDATEES] [datetime] NULL,
[SHIPPED] [datetime] NULL,
[FIRSTPAYME] [datetime] NULL,
[LOCKDATE] [datetime] NULL,
[LOCKEXPIRE] [datetime] NULL,
[CALCDATEDO] [datetime] NULL,
[CALCDATED1] [datetime] NULL,
[CALCDATED2] [datetime] NULL,
[CALCDATEIN] [datetime] NULL,
[CALCDATEFU] [datetime] NULL,
[CLOSEDATE] [datetime] NULL,
[CANCELDATE] [datetime] NULL,
[CALCDATERE] [datetime] NULL,
[CALCDATEI1] [datetime] NULL,
[MONTHLYLOA] [float] NULL,
[TOTALMONTH] [float] NULL,
[ProductID] [float] NULL,
[CPI] [char](10) NULL,
[BrokeredOut] [datetime] NULL,
[Commitment] [varchar](25) NULL,
[Pool] [varchar](25) NULL,
[Points801] [float] NULL,
[Points802] [float] NULL,
[ConfirmedPrice] [float] NULL,
[InvPrice] [float] NULL,
[InvLockDate] [datetime] NULL,
[Units] [float] NULL,
[InvID] [float] NULL,
[Committed_Product] [varchar](50) NULL,
[FloodZone] [char](10) NULL,
[ModBack] [datetime] NULL,
[CommSplitID] [char](10) NULL,
[CommissionSplit] [varchar](50) NULL,
[PropertyClass] [varchar](25) NULL,
[PUDType] [varchar](50) NULL,
[InvBase] [float] NULL,
[LockConfBase] [float] NULL,
[DeedReceivedDate] [datetime] NULL,
[TitleReceivedDate] [datetime] NULL,
[InvestorClearedDate] [datetime] NULL,
[InvestorDeniedDate] [datetime] NULL,
[InvestorSuspendedDate] [datetime] NULL,
[FHACaseNum] [varchar](50) NULL,
[DeniedDate] [datetime] NULL,
[LockCancelled] [datetime] NULL,
[UWRecievedDate] [datetime] NULL,
[UWSuspended] [datetime] NULL,
[ForwardCancelled] [datetime] NULL,
[LeadB2B] [datetime] NULL,
[ServicingBegin] [datetime] NULL,
[ServicingEnd] [datetime] NULL,
[MICertNum] [varchar](50) NULL,
[WareHouseLine] [varchar](50) NULL,
[FirstCreditScoreDate] [datetime] NULL,
[DuplicateFlag] [varchar](50) NULL,
[MinCreditScore] [nchar](10) NULL,
[NMLS_ID] [nchar](10) NULL,
[PQ_ApprovedDate] [datetime] NULL,
[CompletedDate] [datetime] NULL,
[PQ_DeniedDate] [datetime] NULL,
[PQ_WithdrawnDate] [datetime] NULL,
[LeadInactiveDate] [datetime] NULL,
[LoanOriginatedDate] [datetime] NULL,
[IncometeAppDate] [datetime] NULL,
[HOEPAStatus] [nchar](10) NULL,
[FinanceMethod] [varchar](50) NULL,
[IOMonths] [nchar](10) NULL,
[MI_Type] [varchar](50) NULL,
[MI_Activated] [varchar](50) NULL,
[MI_ExpireDate] [datetime] NULL,
[Fee902] [money] NULL,
[Fee1002] [money] NULL,
[HOEPA] [nchar](10) NULL,
[RequiredCreditScore] [nchar](10) NULL,
[ApprovedWithdrawn] [datetime] NULL,
[Withdrawn] [datetime] NULL,
[BranchDenied] [datetime] NULL,
[PQSubmitted] [datetime] NULL,
[Prepay] [nchar](10) NULL,
[CountyCD] [varchar](3) NULL,
[StateCD] [varchar](2) NULL,
[IsTestLoan] [bit] NULL,
[ReqClose_Dt] [date] NULL,
[LockReneg_Dt] [date] NULL,
[PTD_Cond_Count] [int] NULL,
[AdminFee] [varchar](3) NULL,
[PricingTier] [varchar](12) NULL,
[Borr_MidName] [nvarchar](36) NULL,
[CoBorr2_FirstName] [nvarchar](26) NULL,
[CoBorr2_MidName] [nvarchar](36) NULL,
[CoBorr2_LastName] [nvarchar](36) NULL,
[CoBorr2_SSN] [varchar](15) NULL,
[CoBorr2_Address] [nvarchar](36) NULL,
[CoBorr2_City] [nvarchar](26) NULL,
[CoBorr2_State] [varchar](2) NULL,
[CoBorr2_ZIP] [varchar](10) NULL,
[CoBorr2_CredScore] [int] NULL,
[CoBorr3_FirstName] [nvarchar](26) NULL,
[CoBorr3_MidName] [nvarchar](36) NULL,
[CoBorr3_LastName] [nvarchar](36) NULL,
[CoBorr3_SSN] [varchar](15) NULL,
[CoBorr3_Address] [nvarchar](36) NULL,
[CoBorr3_City] [nvarchar](26) NULL,
[CoBorr3_State] [varchar](2) NULL,
[CoBorr3_ZIP] [varchar](10) NULL,
[CoBorr3_CredScore] [int] NULL,
[Created_Dt] [datetime] NULL CONSTRAINT [DF_InHouse_CSV_Backup_Created_Dt] DEFAULT (getdate()),
[LastUpdated_Dt] [datetime] NULL,
[IntentProceed_Dt] [date] NULL,
[ClearClose_Dt] [date] NULL,
[SellerRealtor_ID] [int] NULL,
[BuyerRealtor_ID] [int] NULL,
CONSTRAINT [PK_InHouse_CSV_Backup] PRIMARY KEY NONCLUSTERED
(
[Loan_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
我 运行 调整顾问,它没有提出任何改进建议。
有趣的事情要注意。我回到之前托管这些的原始 SQL 2008 服务器,这两个语句都在 3 秒内执行。两个执行计划是相同的。在 SQL 2012 服务器上,只有 MERSRecord 查询的执行计划是相同的。这三个都与上面列出的匹配。只有 SQL 2012 服务器上的 DMIRecords 不同。可能的错误?
2012 年 1 月 30 日
更新显示我在 dba.stackexchange.com
上的问题的解决方案
将 OPTION (HASH JOIN) 添加到强制散列连接的语句末尾。添加这个导致问题查询在 1 秒内执行并 return 正确的结果集。
使用CTE
清理您的数据。在 JOIN
条件下使用函数将阻止使用索引。
;WITH CteTableA AS(
SELECT
TrimmedCol1 = CAST(LTRIM(RTRIM(m.[COL1])) AS VARCHAR(31)),
Resolved = ISNULL(Resolved, 0),
[Ignore Always] = ISNULL([Ignore Always], 0),
Ignore = ISNULL(Ignore, 0),
Processed = ISNULL(Processed, 0)
FROM TableA
)
,CteTableB AS(
SELECT
*,
TrimmedCol3 = REPLACE(LTRIM(RTRIM(b.[COL3])),'-', '')
FROM TableB
)
SELECT
a.*
FROM CteTableA a
LEFT JOIN CteTableB b
ON b.TrimmedCol3 = a.TrimmedCol1
WHERE
a.Resolved = 0
AND a.[Ignore Always] = 0
AND a.Ignore = 0
AND a.Processed = 0
AND b.ACCOUNTNUMBER IS NULL
编辑:
尝试清理数据并将其插入临时文件 table。然后添加必要的索引。
CREATE TABLE #TempTableA(
TrimmedCol1 VARCHAR(31),
Resolved BIT,
[Ignore Always] BIT,
Ignore BIT,
Processed BIT
-- Other columns you might need
)
CREATE TABLE #TempTableB(
TrimmedCol3 VARCHAR(31),
MERSNUMBER NVARCHAR(31) NULL
-- Other columns you might need
)
INSERT INTO #TempTableA
SELECT
TrimmedCol1 = CAST(LTRIM(RTRIM(m.[COL1])) AS VARCHAR(31)),
Resolved = ISNULL(Resolved, 0),
[Ignore Always] = ISNULL([Ignore Always], 0),
Ignore = ISNULL(Ignore, 0),
Processed = ISNULL(Processed, 0)
FROM TableA
INSERT INTO #TempTableB
SELECT
TrimmedCol3 = REPLACE(LTRIM(RTRIM(b.[COL3])),'-', ''),
MERSNUMBER
FROM TableB
CREATE NONCLUSTERED INDEX #IX_TempTableA ON #TempTableA (TrimmedCol1)
CREATE NONCLUSTERED INDEX #IX_TempTableB ON #TempTableB (TrimmedCol3)
SELECT
a.*
FROM #TempTableA a
LEFT JOIN #TempTableB b
ON b.TrimmedCol3 = a.TrimmedCol1
WHERE
a.Resolved = 0
AND a.[Ignore Always] = 0
AND a.Ignore = 0
AND a.Processed = 0
AND b.MERSNUMBER IS NULL