私は以下のクエリを実行しています。これは主に25レコードを返します。しかし、それは約20秒かかる。また、テーブル内のレコードの総数は400,000未満です。以下はSQLパフォーマンス、実行プランのほとんどがインデックスの代わりにインデックススキャンを表示します。シーク
SELECT * FROM Tickets
LEFT OUTER JOIN HouseAccounts ON (Tickets.lHouseAccount_ID = HouseAccounts.lAccountID)
LEFT OUTER JOIN Customers ON (Tickets.lCustomerID = Customers.lCustomerID)
LEFT OUTER JOIN Vehicles ON (Tickets.lVehicleID = Vehicles.lVehicleID)
WHERE (Tickets.sTicket_Number) NOT LIKE 'ADJ%' AND dbo.DateOnly(Tickets.dtCreated) between DATEADD(day, -60, dbo.DateOnly(GETDATE()))
and dbo.DateOnly(GETDATE()) AND (Tickets.bDeleted = 0 or Tickets.bDeleted IS NULL)
チケットテーブル構造
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tickets](
[Ticket_ID] [int] IDENTITY(1,1) NOT NULL,
[lLocationID] [int] NULL,
[dtCreated] [datetime] NULL,
[dtUpdated] [datetime] NULL,
[dtIn] [datetime] NULL,
[dtOut] [datetime] NULL,
[sTicket_Number] [nvarchar](10) NULL,
[dblTotal] [float] NULL,
[dblTaxes] [float] NULL,
[dblTendered] [float] NULL,
[dblChangeDue] [float] NULL,
[bPaid] [smallint] NULL,
[bCash] [smallint] NULL,
[bCreditCard] [smallint] NULL,
[bGiftCard] [smallint] NULL,
[bHouseAccount] [smallint] NULL,
[lHouseAccount_ID] [int] NULL,
[sUserName] [nvarchar](25) NULL,
[lUserID] [int] NULL,
[lShiftNumber] [int] NULL,
[imgSignature] [image] NULL,
[sSignatureFileName] [nvarchar](25) NULL,
[sPlate] [nvarchar](10) NULL,
[sMake] [nvarchar](20) NULL,
[sCarNumber] [nvarchar](25) NULL,
[sDriverName] [nvarchar](64) NULL,
[sZipcode] [nvarchar](5) NULL,
[sAge] [nvarchar](10) NULL,
[sGender] [nvarchar](10) NULL,
[sFleetCard] [nvarchar](25) NULL,
[sFleetCardExp] [nvarchar](8) NULL,
[bCheck] [smallint] NULL,
[lVIPAccountID] [int] NULL,
[lPointsThisVisit] [float] NULL,
[lGreeterID] [int] NULL,
[lCustomerID] [int] NULL,
[lVehicleID] [int] NULL,
[lWorkOrderID] [int] NULL,
[sWorkOrderNumber] [nvarchar](8) NULL,
[sVehicleMake] [nvarchar](20) NULL,
[sVehicleColor] [nvarchar](20) NULL,
[sVehicleState] [nvarchar](2) NULL,
[sVehiclePlate] [nvarchar](9) NULL,
[sVehicleDamage] [nvarchar](100) NULL,
[sCustomerName] [nvarchar](25) NULL,
[dtReturnDate] [datetime] NULL,
[lOdometer] [int] NULL,
[sRoomNumber] [nvarchar](6) NULL,
[sSpaceNumber] [nvarchar](50) NULL,
[bExpressTicket] [smallint] NULL,
[lRateStructureId] [int] NULL,
[sRateStructure] [nvarchar](25) NULL,
[mRate] [money] NULL,
[mSurcharge] [money] NULL,
[mValidation] [money] NULL,
[mPrepaid] [money] NULL,
[mRefund] [money] NULL,
[mMisc] [money] NULL,
[bVoided] [smallint] NULL,
[bCheckedOut] [smallint] NULL,
[bClosedOut] [smallint] NULL,
[bRefunded] [smallint] NULL,
[lParkerId] [int] NULL,
[bUpdated] [smallint] NULL,
[bIndoor] [smallint] NULL,
[iTimesPrinted] [smallint] NULL,
[bAudit] [bit] NULL,
[bArchived] [bit] NULL,
[lCounterId] [int] NULL,
[bPaymentOther] [bit] NULL,
[sPaymentDescription] [nvarchar](50) NULL,
[bScanned] [bit] NULL,
[bPrinted] [bit] NULL,
[bReversed] [bit] NULL,
[sCashierTerminal] [nvarchar](50) NULL,
[sGreeterTerminal] [nvarchar](50) NULL,
[bLocked] [bit] NULL,
[bWash] [bit] NULL,
[bDeleted] [bit] NULL,
[sDeletedBy] [nvarchar](125) NULL,
[dtClosed] [datetime] NULL,
[lCloserId] [int] NULL,
[lCloserId2] [int] NULL,
[bBarcodeScanned] [bit] NULL,
CONSTRAINT [aaaaaTickets_PK] PRIMARY KEY NONCLUSTERED
(
[Ticket_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 65) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Tickets] ADD CONSTRAINT [DF__Tickets__dblTota__014935CB] DEFAULT ((0)) FOR [dblTotal]
GO
ALTER TABLE [dbo].[Tickets] ADD CONSTRAINT [DF__Tickets__bPaid__023D5A04] DEFAULT ((0)) FOR [bPaid]
GO
ALTER TABLE [dbo].[Tickets] ADD CONSTRAINT [DF__Tickets__bCash__03317E3D] DEFAULT ((0)) FOR [bCash]
GO
ALTER TABLE [dbo].[Tickets] ADD CONSTRAINT [DF__Tickets__bCredit__0425A276] DEFAULT ((0)) FOR [bCreditCard]
GO
ALTER TABLE [dbo].[Tickets] ADD CONSTRAINT [DF__Tickets__bGiftCa__0519C6AF] DEFAULT ((0)) FOR [bGiftCard]
GO
されて、ここで私は既に持っている
計画 - インデックスと実行があります統計の更新とインデックスの更新を試行しました。しかし、何も助けなかった。クエリのパフォーマンスを向上させるにはどうすればよいですか。
第1回DDLと実行計画を含む素晴らしい仕事ですが、まれに起こります。 2.保存された実行計画をファイルとして含めて、自分自身で開くことができる方法はありますか?それはもっと有益だと私は信じています。 – Igor
また、インデックスとしてのテキストのコピー/ペーストは、スクリーンショットより優れているでしょう。そのスクリーンショットはあまり読みにくくありません。インデックスDDLも簡単ですがOKです。 – Igor
既存の索引に対する索引探索によって、 'Tickets'の述語もその組合せも効率的に実装できないため、索引走査は驚くことではありません。 – mustaccio