0
我有一張超過160萬條記錄的表格。 (在下面創建語句。)我使用主鍵在查詢中加入它,查詢需要4秒,其中61%用於此表上的集羣索引掃描。如何加快160萬行上的聚簇索引掃描速度?
下面是該查詢的樣本:
DECLARE @pintDueBy DATETIME = '1/1/1900',
@pintCounty INT = 0
SET @pintDueBy = N'10/30/14'
SET @pintCounty = 42043
SELECT
ISNULL(Eqp.ELOFLNUM,0) AS ELOFLNUM
,ISNULL(Eqp.ELERPNUM, 0) AS ELERPNUM
,ISNULL(CASE
WHEN Eqp.ELERPNUM IS NULL OR Eqp.ELERPNUM = 0 THEN Eqp.ELOFLNUM
ELSE Eqp.ELERPNUM
END, 0) AS OwnFLNUM
,ISNULL(RpOwn.T_AS400_ELVPOWN00_ID,0) AS RespOwn_ID
,ISNULL(Eqp.ELBLDGCD,0) AS ELBLDGCD
,ISNULL(Eqp.ELEEQNO,0) AS ELEEQNO
,ISNULL(Eqp.ELPERMTNO,0) AS ELPERMTNO
,ISNULL(Eqp.ELEPERMID,'') AS ELEPERMID
,ISNULL(ELEYCEXP,0) AS ELEYCEXP
,ISNULL(ELEMCEXP,0) AS ELEMCEXP
, BOISdbo.UDF_PARSE_DATE_FIELDS(NULL,ELEYCEXP,ELEMCEXP,99) AS ELECertExp
, BOISdbo.UDF_PARSE_DATE_FIELDS(NULL,LastInsp.ELDTINSYY,LastInsp.ELDTINSMM,LastInsp.ELDTINSDD) AS LastSeen
, ISNULL(LastInsp.ELERSLT1, '') AS LastSeenResult
,Eqp.T_AS400_ELVPEQP00_ID AS EqpID
,ISNULL(Eqp.ELEECOCD_ID,0) AS ELEECOCD_ID
,ISNULL(Eqp.ELEEORIG_ID,0) AS ELEEORIG_ID
,ISNULL(Eqp.LAST_INSPTN_ID,0) AS LAST_INSPTN_ID
, ISNULL(LastInsp.INVID,0) AS INVID
FROM dbo.T_AS400_ELVPEQP00 AS Eqp
LEFT JOIN dbo.T_AS400_ELVPLOC00 AS Loc
ON Eqp.ELBLDGCD = Loc.ELBLDGCD
LEFT JOIN dbo.T_AS400_ELVPOWN00 AS RpOwn
ON CASE
WHEN Eqp.ELERPNUM IS NULL OR Eqp.ELERPNUM = 0 THEN Eqp.ELOFLNUM
ELSE Eqp.ELERPNUM
END = RpOwn.ELOFLNUM
LEFT JOIN dbo.T_AS400_ELVPINS00 AS LastInsp
ON Eqp.LAST_INSPTN_ID = LastInsp.T_AS400_ELVPINS00_ID
LEFT JOIN BOISdbo.UV_COUNTY_LIST AS cnty
ON cnty.REF_VALUE = Loc.ELLCNTY
WHERE
Loc.ELLSTATS IN ('O') -- O - Occupied
AND
ISNULL(LastInsp.ELERSLT1, '') NOT IN ('O') -- O - Out of Service
AND
(@pintCounty = 0 OR cnty.REF_VALUE = @pintCounty)
我這個查詢輸出列表僅使用領域的6:
[BOIS].[dbo].[T_AS400_ELVPINS00].ELDTINSYY
[BOIS].[dbo].[T_AS400_ELVPINS00].ELDTINSMM
[BOIS].[dbo].[T_AS400_ELVPINS00].ELDTINSDD
[BOIS].[dbo].[T_AS400_ELVPINS00].ELERSLT1
[BOIS].[dbo].[T_AS400_ELVPINS00].T_AS400_ELVPINS00_ID
[BOIS].[dbo].[T_AS400_ELVPINS00].INVID
任何想法?
CREATE TABLE [dbo].[T_AS400_ELVPINS00](
[ELBLDGCD] [int] NULL,
[ELEEQNO] [int] NULL,
[ELDTINSYY] [int] NULL,
[ELDTINSMM] [int] NULL,
[ELDTINSDD] [int] NULL,
[ELINSCD] [varchar](6) NULL,
[ELFEECO] [varchar](6) NULL,
[ELIINSR] [varchar](6) NULL,
[ELERSLT1] [varchar](1) NULL,
[ELDTIBYY] [int] NULL,
[ELDTIBMM] [int] NULL,
[ELDTIBDD] [int] NULL,
[ELECRDTYY] [int] NULL,
[ELECRDTMM] [int] NULL,
[ELECRDTDD] [int] NULL,
[ELTINSP] [varchar](1) NULL,
[ELECNUM] [int] NULL,
[ELEFEE] [decimal](18, 0) NULL,
[ELEBILL] [varchar](1) NULL,
[ELDUPCT] [varchar](1) NULL,
[ELDTDUPYY] [int] NULL,
[ELDTDUPMM] [int] NULL,
[ELDTDUPDD] [int] NULL,
[ELEFLG] [varchar](1) NULL,
[ELFORCD] [varchar](1) NULL,
[ELEINV] [varchar](8) NULL,
[ELELSEAL] [varchar](1) NULL,
[ELELSDTY] [int] NULL,
[ELELSDTM] [int] NULL,
[ELELSDTD] [int] NULL,
[ELELSNUM] [int] NULL,
[ELREMVYY] [int] NULL,
[ELREMVMM] [int] NULL,
[ELREMVDD] [int] NULL,
[ELEDFNCS] [varchar](1) NULL,
[ELEDFNCDA] [varchar](5) NULL,
[ELERFLDA] [varchar](1) NULL,
[ELEDFNCDB] [varchar](5) NULL,
[ELERFLDB] [varchar](1) NULL,
[ELEDFNCDC] [varchar](5) NULL,
[ELERFLDC] [varchar](1) NULL,
[ELEDFNCDD] [varchar](5) NULL,
[ELERFLDD] [varchar](1) NULL,
[ELEDFNCDE] [varchar](5) NULL,
[ELERFLDE] [varchar](1) NULL,
[ELEDFNCDF] [varchar](5) NULL,
[ELERFLDF] [varchar](1) NULL,
[ELEDFNCDG] [varchar](5) NULL,
[ELERFLDG] [varchar](1) NULL,
[ELEDFNCDH] [varchar](5) NULL,
[ELERFLDH] [varchar](1) NULL,
[ELEDFNCDI] [varchar](5) NULL,
[ELERFLDI] [varchar](1) NULL,
[ELEDFNCDJ] [varchar](5) NULL,
[ELERFLDJ] [varchar](1) NULL,
[ELEDFNCDK] [varchar](5) NULL,
[ELERFLDK] [varchar](1) NULL,
[ELEDFNCDL] [varchar](5) NULL,
[ELERFLDL] [varchar](1) NULL,
[ELEDFNCDM] [varchar](5) NULL,
[ELERFLDM] [varchar](1) NULL,
[ELEDFNCDN] [varchar](5) NULL,
[ELERFLDN] [varchar](1) NULL,
[ELEDFNCDO] [varchar](5) NULL,
[ELERFLDO] [varchar](1) NULL,
[ELEDFNCDP] [varchar](5) NULL,
[ELERFLDP] [varchar](1) NULL,
[ELEDFNCDQ] [varchar](5) NULL,
[ELERFLDQ] [varchar](1) NULL,
[ELEDFNCDR] [varchar](5) NULL,
[ELERFLDR] [varchar](1) NULL,
[ELEDFNCDS] [varchar](5) NULL,
[ELERFLDS] [varchar](1) NULL,
[ELEDFNCDT] [varchar](5) NULL,
[ELERFLDT] [varchar](1) NULL,
[ELEIUPDTY] [int] NULL,
[ELEIUPDTM] [int] NULL,
[ELEIUPDTD] [int] NULL,
[ELESCLTR] [varchar](1) NULL,
[ELEDTCOY] [int] NULL,
[ELEDTCOM] [int] NULL,
[ELEDTCOD] [int] NULL,
[ELDTORDY] [int] NULL,
[ELDTORDM] [int] NULL,
[ELDTORDD] [int] NULL,
[ELDTRPRY] [int] NULL,
[ELDTRPRM] [int] NULL,
[ELDTRPRD] [int] NULL,
[ELERPRCD] [varchar](1) NULL,
[ELSTRHH] [int] NULL,
[ELSTRMM] [int] NULL,
[ELSTRSS] [int] NULL,
[ELSTPHH] [int] NULL,
[ELSTPMM] [int] NULL,
[ELSTPSS] [int] NULL,
[ELDTCLRYY] [int] NULL,
[ELDTCLRMM] [int] NULL,
[ELDTCLRDD] [int] NULL,
[ELIUSER] [varchar](10) NULL,
[ELIKEYID] [varchar](1) NULL,
[T_AS400_ELVPINS00_ID] [int] IDENTITY(1,1) NOT NULL,
[DOC_LINK_ID] [int] NULL,
[CRTD_BY] [varchar](30) NOT NULL,
[CRTD_DT] [datetime] NOT NULL,
[MODFD_BY] [varchar](30) NULL,
[MODFD_DT] [datetime] NULL,
[INVID] [int] NULL,
[PARENT_INSPTN_ID] [int] NULL,
[ELEEQP_ID] [int] NULL,
[COMMENTS] [varchar](1500) NULL,
[ELFEECO_ID] [int] NULL,
[T_AS400_ELVPAPP0_ID] [int] NULL,
CONSTRAINT [PK_T_AS400_ELVPINS00] PRIMARY KEY CLUSTERED
(
[T_AS400_ELVPINS00_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]
GO
將[執行計劃](http://stackoverflow.com/a/7359705/562459)粘貼到您的問題中。 – 2014-10-31 17:52:21
你如何限制你的查詢中返回的記錄?如果你選擇的是「全部」主鍵,我認爲你不會去掃描 – Kritner 2014-10-31 17:52:23
根據你的查詢,你可以嘗試把索引放在你需要的那六列 - 然後也許你會得到一個更便宜,更精簡的非聚簇索引掃描,而不是聚簇索引(=表)掃描 – 2014-10-31 18:14:08