Ich habe eine gespeicherte Prozedur erstellt, um Daten zu erhalten. In dieser gespeicherten Prozedur habe ich 1 Tabelle zurückgegeben und Tabelle speichert die Daten über 1 Lakh + Daten. Also gerade jetzt habe ich die gespeicherte Prozedur ausgeführt, dass ich die Daten in über 1 Minute Zeit nehme. Ich will gerade mit in 1 Sekunde Daten bekommen. Ich habe auch SET NOCOUNT ON;
gesetzt und auch fehlenden Index erstellt. Trotzdem bekomme ich die gleiche Zeit für die Daten.Wie kann die Geschwindigkeit der Abfrage mit SQL Server verbessert werden?
Dies ist meine Frage:
DECLARE @CurMon int
DECLARE @year nvarchar(max)
SELECT @CurMon = month(getdate())
SELECT @year = year(getdate())
SELECT
FORMAT(dateadd(MM, T.i, getdate()),'MMM-yy') AS DateColumn,
ISNULL(uf.TotalCount, 0) as TotalCount
FROM
(VALUES ([email protected]),([email protected]),([email protected]),([email protected]),([email protected]),([email protected]),([email protected]), ([email protected]), ([email protected]), ([email protected]), ([email protected]), ([email protected])) AS T(i)
OUTER APPLY
(SELECT DISTINCT
COUNT(datepart(MM,UF.InsertDateTime)) OVER (partition by datepart(MM,UF.InsertDateTime)) AS TotalCount
FROM dbo.UserFollowers UF
INNER JOIN dbo.Users U on U.UserId = UF.FollowerId
WHERE DATEDIFF(mm,UF.InsertDateTime, DATEADD(mm, T.i, GETDATE())) = 0 and UF.IsFollowed = 1
) uf
order by DATEPART(MM,convert(datetime,FORMAT(dateadd(MM, T.i, getdate()),'MMMM') +'01 '[email protected],110))
ich bin auch versuchen, eine andere Abfrage für die Geschwindigkeit der Abfrage verbessern, aber immer noch gleiche Zeit ich erhalte. Hier wird diese Abfrage auch gedruckt.
declare @StartDate datetime = dateadd(year , datediff(year , 0, getdate()) , 0)
declare @tempT2 table
(
MNo int,
[Month] datetime,
NextMonth datetime)
;with Months as (
select top (12)
MNo = row_number() over (order by number)
,[Month] = dateadd(month, row_number() over (order by number) -1, @StartDate)
, NextMonth = dateadd(month, row_number() over (order by number), @StartDate)
from master.dbo.spt_values
)
insert into @tempT2
select * from Months
select
m.MNo
, Month = format(m.Month, 'MMM-yy')
, tally = count(UF.InsertDateTime)
from @tempT2 m
left join dbo.UserFollowers UF
INNER JOIN dbo.Users U on U.UserId = UF.FollowerId
on UF.InsertDateTime >= m.Month
and UF.InsertDateTime < m.NextMonth where UF.IsFollowed = 1
group by m.MNo,format(m.Month, 'MMM-yy')
order by MNo
hier das ist meine beide Abfrage ich versuche, haben aber immer noch i Erfolg bin nicht für das Erhalten der die Geschwindigkeit der Abfrage verbessern. und tut mir leid, aber ich kann hier meinen Ausführungsplan der Abfrage nicht sehen, ich habe keine Erlaubnis dafür.
Bitte benutzen ** international verständlich ** Maßeinheiten: Tausende, Millionen, Milliarden ... –
Fragen Leistung Hilfe suchen sollte DDL umfassen, DML Von den beteiligten Tabellen zusammen mit test data..wenn Ihre Testdaten groß sind, versuchen Sie, das Schema und die Statistiken für die Tabelle zu scripten ('rechte Maustaste Datenbank-> Skripte generieren-> bestimmte Datenbankobjekte auswählen-> im nächsten Bildschirm wählen Sie Erweitert und wählen Sie Skriptstatistiken)' und fügen Sie sie ein es in Frage ... Mit dieser Info repro das gleiche Problem Sie konfrontiert sind.Andernfalls wird es sehr schwierig, Ihre Frage zu beantworten ersion hilft auch – TheGameiswar
@TheGameiswar, aber ich kann keine Erlaubnis für das Skript und den Ausführungsplan generieren hier zeigen. Sie wollen ein paar Daten und mein O/P wollen, also hier kann ich das tun? nur diese Abfrage benötigt mehr und mehr Zeit für das Abrufen von Daten auf dem Server. – Edit