2015-03-13 85 views
1

在表的集群索引中包含更多列会增加将索引扫描转换为索引查找的几率?我试图通过大量阅读表格的操作来提高响应能力。它有199列,现在有65k行,它值得吗?集群索引扫描与索引查找

这里的查询:

SELECT T1.SALESID,T1.SALESNAME,T1.RESERVATION,T1.CUSTACCOUNT,T1.INVOICEACCOUNT,T1.DELIVERYDATE,T1.URL,T1.PURCHORDERFORMNUM,T1.SALESGROUP,T1.FREIGHTSLIPTYPE,T1.DOCUMENTSTATUS,T1.INTERCOMPANYORIGINALSALESID,T1.CURRENCYCODE,T1.PAYMENT,T1.CASHDISC,T1.TAXGROUP,T1.LINEDISC,T1.CUSTGROUP,T1.DISCPERCENT,T1.INTERCOMPANYORIGINALCUSTACCOUNT,T1.PRICEGROUPID,T1.MULTILINEDISC,T1.ENDDISC,T1.CUSTOMERREF,T1.LISTCODE,T1.DLVTERM,T1.DLVMODE,T1.PURCHID,T1.SALESSTATUS,T1.MARKUPGROUP,T1.SALESTYPE,T1.SALESPOOLID,T1.POSTINGPROFILE,T1.TRANSACTIONCODE,T1.INTERCOMPANYAUTOCREATEORDERS,T1.INTERCOMPANYDIRECTDELIVERY,T1.INTERCOMPANYDIRECTDELIVERYORIG,T1.SETTLEVOUCHER,T1.INTERCOMPANYALLOWINDIRECTCREATION,T1.INTERCOMPANYALLOWINDIRECTCREATIONORIG,T1.DELIVERYNAME,T1.ONETIMECUSTOMER,T1.COVSTATUS,T1.COMMISSIONGROUP,T1.PAYMENTSCHED,T1.INTERCOMPANYORIGIN,T1.EMAIL,T1.FREIGHTZONE,T1.RETURNITEMNUM,T1.CASHDISCPERCENT,T1.CONTACTPERSONID,T1.DEADLINE,T1.PROJID,T1.INVENTLOCATIONID,T1.ADDRESSREFTABLEID,T1.VATNUM,T1.PORT,T1.INCLTAX,T1.NUMBERSEQUENCEGROUP,T1.FIXEDEXCHRATE,T1.LANGUAGEID,T1.AUTOSUMMARYMODULETYPE,T1.SALESORIGINID,T1.ESTIMATE,T1.TRANSPORT,T1.PAYMMODE,T1.PAYMSPEC,T1.FIXEDDUEDATE,T1.EXPORTREASON,T1.STATPROCID,T1.INTERCOMPANYCOMPANYID,T1.INTERCOMPANYPURCHID,T1.INTERCOMPANYORDER,T1.DLVREASON,T1.QUOTATIONID,T1.RECEIPTDATEREQUESTED,T1.RECEIPTDATECONFIRMED,T1.SHIPPINGDATEREQUESTED,T1.SHIPPINGDATECONFIRMED,T1.ITEMTAGGING,T1.CASETAGGING,T1.PALLETTAGGING,T1.ADDRESSREFRECID,T1.CUSTINVOICEID,T1.INVENTSITEID,T1.DEFAULTDIMENSION,T1.CREDITCARDCUSTREFID,T1.SHIPCARRIERACCOUNT,T1.SHIPCARRIERID,T1.SHIPCARRIERFUELSURCHARGE,T1.SHIPCARRIERBLINDSHIPMENT,T1.SHIPCARRIERDELIVERYCONTACT,T1.CREDITCARDAPPROVALAMOUNT,T1.CREDITCARDAUTHORIZATION,T1.RETURNDEADLINE,T1.RETURNREPLACEMENTID,T1.RETURNSTATUS,T1.RETURNREASONCODEID,T1.CREDITCARDAUTHORIZATIONERROR,T1.SHIPCARRIERACCOUNTCODE,T1.RETURNREPLACEMENTCREATED,T1.SHIPCARRIERDLVTYPE,T1.DELIVERYDATECONTROLTYPE,T1.SHIPCARRIEREXPEDITEDSHIPMENT,T1.SHIPCARRIERRESIDENTIAL,T1.MATCHINGAGREEMENT,T1.SYSTEMENTRYSOURCE,T1.SYSTEMENTRYCHANGEPOLICY,T1.MANUALENTRYCHANGEPOLICY,T1.DELIVERYPOSTALADDRESS,T1.SHIPCARRIERPOSTALADDRESS,T1.SHIPCARRIERNAME,T1.WORKERSALESTAKER,T1.SOURCEDOCUMENTHEADER,T1.BANKDOCUMENTTYPE,T1.SALESUNITID,T1.SMMSALESAMOUNTTOTAL,T1.SMMCAMPAIGNID,T1.CASHDISCBASEDATE,T1.CASHDISCBASEDAYS,T1.PDSBATCHATTRIBAUTORES,T1.PDSCUSTREBATEGROUPID,T1.PDSREBATEPROGRAMTMAGROUP,T1.WORKERSALESRESPONSIBLE,T1.AA_INITIALCONDITION,T1.AA_MATERIAL,T1.AA_PONUMBER,T1.AA_REFERENCENUMBER,T1.AA_FINALCONDITION,T1.AA_TEMPLATEID,T1.AA_PRIME,T1.AA_CONTAINER,T1.AA_ENTEREDDATE,T1.AA_ENTEREDDATETZID,T1.AA_EXPEDITE,T1.AA_PROMISEDDATE,T1.AA_PROMISEDDATETZID,T1.AA_GROSSWEIGHT,T1.AA_ALLOY,T1.AA_ITAR,T1.AA_EAR,T1.AA_GSI,T1.AA_SOLUTIONTREAT,T1.AA_BASICFORMID,T1.AA_PLANNEDBY,T1.AA_CLASSIFICATION,T1.INVENTPACKINGMATERIALCODE,T1.AA_CSI,T1.AA_QTY,T1.AA_BILLINGADDRESS,T1.AA_PROCESSMASTER,T1.AA_BILLINGNAME,T1.AA_PACKAGING,T1.AA_HIDECERTMEASURE,T1.AA_INVOICEAPPROVED,T1.AA_PROSHIPMEMOPRINTED,T1.AA_CERTIFIEDDATE,T1.TRI_OPSTATUS,T1.MODIFIEDDATETIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.CREATEDBY,T1.RECVERSION,T1.PARTITION,T1.RECID,T2.PERSON,T2.RECVERSION,T2.RECID,T3.LOCATION,T3.ADDRESS,T3.VALIDFROM,T3.VALIDFROMTZID,T3.VALIDTO,T3.VALIDTOTZID,T3.COUNTRYREGIONID,T3.RECVERSION,T3.RECID,T4.ADDRESS,T4.COUNTRYREGIONID,T4.LOCATION,T4.VALIDFROM,T4.VALIDFROMTZID,T4.RECVERSION,T4.RECID,T5.LOCATION,T5.ADDRESS,T5.VALIDFROM,T5.VALIDFROMTZID,T5.RECVERSION,T5.RECID,T6.NAME,T6.RECID,T6.RECVERSION,T6.INSTANCERELATIONTYPE,T6.NAMESEQUENCE,T6.RECVERSION,T6.RECID,T7.DESCRIPTION,T7.LOCATIONID,T7.RECVERSION,T7.RECID,T8.DESCRIPTION,T8.LOCATIONID,T8.RECVERSION,T8.RECID,T1.AA_COMMENTS FROM SALESTABLE T1 LEFT OUTER JOIN HCMWORKER T2 ON (([email protected]) AND ((T1.WORKERSALESTAKER=T2.RECID) AND (T1.WORKERSALESTAKER=T2.RECID))) LEFT OUTER JOIN LOGISTICSPOSTALADDRESS T3 ON (([email protected]) AND ((T1.DELIVERYPOSTALADDRESS=T3.RECID) AND (([email protected] OR ([email protected])) OR ([email protected])))) LEFT OUTER JOIN LOGISTICSPOSTALADDRESS T4 ON (([email protected]) AND ((T1.SHIPCARRIERPOSTALADDRESS=T4.RECID) AND (([email protected] OR ([email protected])) OR ([email protected])))) LEFT OUTER JOIN LOGISTICSPOSTALADDRESS T5 ON (([email protected]) AND ((T1.AA_BILLINGADDRESS=T5.RECID) AND (([email protected] OR ([email protected])) OR ([email protected])))) LEFT OUTER JOIN DIRPARTYTABLE T6 ON ((((T6.PARTITI[email protected]) AND (T6.INSTANCERELATIONTYPE IN (@P15,@P16,@P17,@P18,@P19,@P20,@P21))) AND ((T2.PERSON=T6.RECID) AND (T2.PERSON=T6.RECID))) AND (T6.INSTANCERELATIONTYPE IN (2975))) LEFT OUTER JOIN LOGISTICSLOCATION T7 ON (([email protected]) AND (T3.LOCATION=T7.RECID)) LEFT OUTER JOIN LOGISTICSLOCATION T8 ON (([email protected]) AND (T5.LOCATION=T8.RECID)) WHERE ((([email protected]) AND ([email protected])) AND ((NOT (([email protected])) AND NOT (([email protected]))) AND ((((((((((((((((((((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND ([email protected])) AND (T6.NAME IS NULL)) AND (T6.NAMESEQUENCE IS NULL)) AND ([email protected])) AND (T8.LOCATIONID>[email protected])) OR ((((((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND ([email protected])) AND (T6.NAME IS NULL)) AND (T6.NAMESEQUENCE IS NULL)) AND (T7.LOCATIONID>@P42))) OR (((((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND ([email protected])) AND (T6.NAME IS NULL)) AND NOT ((T6.NAMESEQUENCE IS NULL)))) OR (((((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND ([email protected])) AND (T6.NAME IS NULL)) AND NOT ((T6.RECID IS NULL)))) OR ((((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND ([email protected])) AND NOT ((T6.NAME IS NULL)))) OR (((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND ([email protected])) AND (T5.VALIDFROM>@P66))) OR ((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND (T5.LOCATION>@P71))) OR ((((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND (T4.LOCATION IS NULL)) AND NOT ((T4.VALIDFROM IS NULL)))) OR (((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND ([email protected])) AND NOT ((T4.LOCATION IS NULL)))) OR ((((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND ([email protected])) AND (T3.VALIDFROM>@P83))) OR (((([email protected]) AND ([email protected])) AND (T2.PERSON IS NULL)) AND (T3.LOCATION>@P86))) OR ((([email protected]) AND ([email protected])) AND NOT ((T2.PERSON IS NULL)))) OR (([email protected]) AND (T1.SALESID>@P90))) OR (T1.SALESNAME>@P91)))) ORDER BY T1.SALESNAME,T1.SALESID,T2.PERSON,T3.LOCATION,T3.VALIDFROM,T4.LOCATION,T4.VALIDFROM,T5.LOCATION,T5.VALIDFROM,T6.NAME,T6.RECID,T6.NAMESEQUENCE,T7.LOCATIONID,T8.LOCATIONID OPTION(FAST 2) 
+0

对于这样一个小桌子,测试它有什么影响非常简单。如果您想要如何改进查询,您至少应该上传查询计划+表/索引结构。 – 2015-03-13 17:28:35

回答

2

这是不可能挑聚簇索引中的列。它始终包含所有列。

如果您的意思是键栏:这里没有“机会”。这取决于查询索引是否合适。没有模式和查询就没有什么可说的了。请参考几乎所有索引教程来自己回答。

1

将增加更多的列到聚集索引密钥,又名主键,可能会将索引扫描变成索引搜索?是的,但通过主键进行查询调整可能会产生其他复杂情况。在您想要“查找”的列上添加非聚集索引可能不那么痛苦。

你能否提供问题查询?

相关问题