Verwenden von SQL, SQL-Server-Manager 2008 c-sharp.net 4.0 und MS Visual Studio Professional 2010:Zunahme Speed Of Abfrage
Ich habe für mein Programm auf einer Haupt-Abfrage zu arbeiten, und so weit es funktioniert genau wie beabsichtigt. Das einzige Problem ist die Zeit, die zum Ausführen benötigt wird.
einige Male kann es bis zu 3 Minuten für etwa 2000 Datensätze dauern.
Ich wurde gebeten, diese Abfrage viel schneller zu bekommen, aber in aller Ehrlichkeit bin ich mir nicht sicher, wie ich das kann.
Abfrage ist unten, es verwendet einen Verbindungsserver und 4 Tabellen. 3 auf einem Server und der andere ist lokal.
USE [ShaftData]
GO
/****** Object: StoredProcedure [dbo].[GetSalesBuyers] Script Date: 03/29/2012 10:03:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetSalesBuyers]
@Acct varchar(255),
@Cdisc varchar(255),
@bcs varchar(255),
@From date,
@Too date
AS
SELECT i.Acct,
i.Name,
i.Document,
i.Part,
i.Qty,
i.Unit,
dbo.NEWPareto.Pareto,
i.pg,
dbo.MyPgTable.PgName,
i.[DateTime],
i.BinSeqNo,
i.cdisc,
i.bcs
FROM
OPENQUERY(SACBAUTO, 'SELECT dbo.iHeads.acct,
dbo.iHeads.name,
dbo.iLines.Document,
dbo.iLines.Part,
dbo.iLines.Pg,
dbo.iLines.Qty,
dbo.iLines.unit,
dbo.iHeads.[DateTime],
dbo.iLines.BinSeqNo,
dbo.Customer.cdisc,
dbo.Customer.Bcs
FROM Autopart.dbo.iheads INNER JOIN Autopart.dbo.iLines ON
Autopart.dbo.Iheads.document = autopart.dbo.iLines.document
INNER JOIN Autopart.dbo.Customer ON Autopart.dbo.iheads.acct
= Autopart.dbo.customer.keycode
GROUP By dbo.iHeads.acct,
dbo.iHeads.name,
dbo.iLines.Document,
dbo.iLines.Part,
dbo.iLines.Pg,
dbo.iLines.Qty,
dbo.iLines.unit,
dbo.iHeads.[DateTime],
dbo.iLines.BinSeqNo,
dbo.Customer.cdisc,
dbo.Customer.bcs
') i
left JOIN
dbo.NEWPareto
ON
i.Part collate SQL_Latin1_General_CP1_CI_AS = dbo.NEWPareto.Part
left JOIN
dbo.MyPgTable
ON
i.pg collate SQL_Latin1_General_CP1_CI_AS = dbo.MyPgTable.[pGroup]
WHERE
(i.[DateTime] BETWEEN @From AND @Too)
AND (@Cdisc > 29 OR i.cdisc = @Cdisc)
AND(@Acct = '0'
OR (@Acct = '1659%' AND i.Acct not Like @Acct)
OR (@Acct = '1557%' AND i.Acct Like @Acct)
OR (@Acct = '18731%' AND i.Acct not Like '1873%' AND i.Acct not Like '1432%')
OR (@Acct != '1659%' AND i.Acct Like @Acct))
AND(@bcs = '0' OR i.bcs != @bcs)
AND i.pg != '60'
AND i.pg != '61'
AND i.pg != '62'
GROUP BY i.Acct,
i.Name,
i.Document,
i.Part,
i.Qty,
i.Unit,
dbo.NEWPareto.Pareto,
i.pg,
dbo.MyPgTable.PgName,
i.[DateTime],
i.BinSeqNo,
i.cdisc,
i.bcs
Wie Sie seine ziemlich lange sehen können, aber funktioniert gut, ist es eine Möglichkeit, drastisch die Geschwindigkeit zu erhöhen? oder arbeitet mit verbundenen Servern das Problem?
Danke an euch alle, dass ihr mir bei dieser Frage geholfen habt, ich würde euch alle gerne für die richtige Antwort auswählen, aber ich kann nicht, also stattdessen Ups für alle!
Dies könnte eine Frage sein besser geeignet für [Code Review] (http://codereview.stackexchange.com/) oder [Datenbankadministratoren] (http://dba.stackexchange.com/) – musefan
Vielleicht lohnt sich, eine zu betrachten Indizes und Schlüssel, die Sie auf Ihren Tischen haben; Sie können möglicherweise effizientere Indizes erstellen, um die Vorgänge zu beschleunigen. – JTeagle
Ich gebe diese Seiten einen Versuch, hatte Hopping meine Abfrage hatte einen Teil, der übersehen wurde, dass viel schneller gemacht werden könnte, weshalb ich fragte, hier. – lemunk