Forum » Programiranje » Optimizacija querya
Optimizacija querya
mmaestro ::
Pozdravljeni imam sleceč problem, ko poženem query (glej spodaj), mi stvar dela ful dolgo, problem je predvsem, ker je ful zapisov v tabeli nekje okrog miljona, tako da me zanima, če se da query kako optimizirat.
Ta query se mi zdi, da ni čisto delujoč, ker sem ga nekaj popravljal, sam trenutno te verzije nimam tu, zanima me predvsem to
INSERT INTO Data_Temp (Date, Value)
SELECT (@TimeMax, AVG(ParsedValue)
FROM Data_Parsed
WHERE (ParsedValueType = @ValueType) AND (ParsedDateTime BETWEEN (@TimeMin AND @TimeMax))
kako bi se dalo to optimizirat, da bi delovalo bolj hitro oz če kdo pozna še kako drugo rešitev.
celotna store procedura (nedelujoča se mi zdi )
CREATE PROCEDURE sp_InsertValuesToDataTemp @ValueType varchar(38), @TimeFrom Datetime, @TimeTo Datetime, @Minutes int
AS
TRUNCATE TABLE Data_Temp
DECLARE @TimeMin Datetime, @TimeMax Datetime
SET @TimeMin = @TimeFrom
SET @TimeMax = DATEADD(minute, @Minutes, @TimeFrom)
WHILE (@TimeMax < @TimeTo)
BEGIN
INSERT INTO Data_Temp (Date, Value)
SELECT (@TimeMax, AVG(ParsedValue)
FROM Data_Parsed
WHERE (ParsedValueType = @ValueType) AND (ParsedDateTime BETWEEN (@TimeMin AND @TimeMax))
SET @TimeMin = @TimeMax
SET @TimeMax = DATEADD(minute, @Minutes, @TimeMin)
END
GO
LP
Ta query se mi zdi, da ni čisto delujoč, ker sem ga nekaj popravljal, sam trenutno te verzije nimam tu, zanima me predvsem to
INSERT INTO Data_Temp (Date, Value)
SELECT (@TimeMax, AVG(ParsedValue)
FROM Data_Parsed
WHERE (ParsedValueType = @ValueType) AND (ParsedDateTime BETWEEN (@TimeMin AND @TimeMax))
kako bi se dalo to optimizirat, da bi delovalo bolj hitro oz če kdo pozna še kako drugo rešitev.
celotna store procedura (nedelujoča se mi zdi )
CREATE PROCEDURE sp_InsertValuesToDataTemp @ValueType varchar(38), @TimeFrom Datetime, @TimeTo Datetime, @Minutes int
AS
TRUNCATE TABLE Data_Temp
DECLARE @TimeMin Datetime, @TimeMax Datetime
SET @TimeMin = @TimeFrom
SET @TimeMax = DATEADD(minute, @Minutes, @TimeFrom)
WHILE (@TimeMax < @TimeTo)
BEGIN
INSERT INTO Data_Temp (Date, Value)
SELECT (@TimeMax, AVG(ParsedValue)
FROM Data_Parsed
WHERE (ParsedValueType = @ValueType) AND (ParsedDateTime BETWEEN (@TimeMin AND @TimeMax))
SET @TimeMin = @TimeMax
SET @TimeMax = DATEADD(minute, @Minutes, @TimeMin)
END
GO
LP
darkolord ::
Uporabljaš indexe? Execution plan si pogledal?
Načeloma lahko probaš pri WHERE zamenjat vrstni red, to se zna poznat, če je prvi izraz večkrat true (konkretno, če je ParsedValueType v tabeli povečini enak)
Načeloma lahko probaš pri WHERE zamenjat vrstni red, to se zna poznat, če je prvi izraz večkrat true (konkretno, če je ParsedValueType v tabeli povečini enak)
Zgodovina sprememb…
- spremenilo: darkolord ()
mmaestro ::
Ja indexe uporabljam. Sem se menil z enim pa mi je reku, da sta funkciji AVG in BETWEEN ful počasni, kako naj pol to drugače napišem ok between lahko nadomestiš z (ParsedDateTime < @TimeMax) AND (ParsedDateTime > @TimeMin AND), sam ne vem pol če to kaj hitrejše dela.
Exectuin plan, kaj naj bi to blo?
Exectuin plan, kaj naj bi to blo?
frudi ::
glede na to, da na začetku sprazniš Data_Temp tabelo, zbriši indexe z nje in jih na koncu na novo postavi. enako velja za morebitne triggerje.
če imaš clustered index na Data_Parsed kje drugje, ga probaj postavit na ParsedDateTime stolpec (če je to možno in smiselno glede na ostalo funkcionalnost baze).
če imaš clustered index na Data_Parsed kje drugje, ga probaj postavit na ParsedDateTime stolpec (če je to možno in smiselno glede na ostalo funkcionalnost baze).
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
snow ::
PREBERI ME: označevanje topicov v oddelku programiranje! Move along please.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Optimizacija MySQL - query / tabelaOddelek: Programiranje | 3915 (2503) | MrStein |
» | C# visual studio SQL problemOddelek: Programiranje | 2084 (1662) | Apple |
» | [c#] Majhen problemčekOddelek: Programiranje | 998 (806) | darkolord |
» | C# INSERT statment ne vpise podatkovOddelek: Programiranje | 1203 (1077) | darkolord |
» | Statistika dijakov, pomocOddelek: Programiranje | 1777 (1261) | Mitja Bonča |