SELECT Time, Value FROM [DATA] Where TableName = @soustr AND (Time > DATEADD(minute,-50,(SELECT ISNULL(Max(Time),'1900-01-01 00:00:00') FROM [DATA] Where TableName = @resstr)) Men det kanske går ganska snabbt ? Frågan ovan tar cirka 5-6 sekunder, det är 250 miljoner rader i databasen.. 2005. Skulle det göra skillnad med 2008versionen? Förklara isåfall.. Har primärnykel på kolumn ID Jag tolkar det som att du har ett klustrat index på kolumn ID. japp.. Nej, men du ska bygga om ditt index. >Kolumnen ID som är primärnyckel och ingår i det klustarde indexet ska inte vara med i ditt index. Nej ta det lugnt nu och ändra först när vi förstår varandra fullt ut. Where TableName = '...' INGÅR ALLTID... Kör den här frågan nedan. Ahhh, tack för hjälpen, men jag hade lite bråttom. Bra!! Kan man ändra detta på tabellen direkt? den innehåller 250 miljoner rader ju.. Men sist jag gjrode det avbröts det hela tiden :S Japp, använder Ms SQL Server Manager Studio Express.. 5. Bygg ett nytt index där du lägger till Tablename som Index key kolumn (ASC), Jag byggde ett index på en tabell med ca 7,5 miljoner rader, tog ca 40 - 45 sek. Berätta hur du gör när du skapar ett index. >Berätta hur du gör när du skapar ett index. Kör det här skriptet för att bygga det nya indexet. Kör det här så vet vi läget. japp har ändrat det du gav "kod" till.. Men det verar som "mitt tidigare" index är kvar när jag körde ditt? Alltså det lade till ditt till den redan befintliga... Såhär ser det ut nu: Vi ska ändra index IX_DATA_1. jag provkörde denna nu: Ok. Jo jo, ta det lugnt. Som jag sa förut. hmm förstår inte varför den ordningen.. men jag litar på dig :D det är fixat nu den jobbar fortfarande efter ändringarna jag gjorde.. såfort den jobbat klart så testar jag. Om man vill ändra sort order, så klickar man bara på ascending eller descending, Odningen är viktig utifrån hur stor selektivitet (få olika värden) varje kolumn har. Men i Alla frågor måste TableName = nått anges först o främst.. Jag tror ifs det finns mer unika under kolumnen Value än Time.. Det TROR jag.. Nu klart. Nu kör jag ditt senaste script.. Kan vi kolla vad som är unikast enkelt? Kanske är vätr? Nu så.. Fick upp 5 kolumner, de sista 2 heter is_descending_key och id_included_column. Vi kan diskutera detta med index senare. PK_DATA CLUSTERED ID 0 0 is_descending_key och id_included_column visar precis det jag vill. hmm :S jag tycker det går jättelångsamt nu när jag kör min CLR SP jag skapat.. Tidigare tog det typ 4min att köra (massa sqlfrågor ställer den och data bearbetas..) Ok Hjalmar. Det kan bero på att vi skrivit om indexen och då ändras cachen, statistiken. Row acount 207740818 = 207 740 818 Testa denna fråga (kör den två ggr, och jämför) väntar fortfarande på att förra frågan ska köras klart.. körts 10minuter.. tidigare tog det som sagt 4-5 minuter.. Den förra frågas blir inte klart. Vi måste göra om indexeringen på nått sätt. Det fungerar ej bra nu. Hjalmar man kan bara ha ett klustrat index per tabell. DENNA frågan gick precis DIREKT innan: (svårt att prova någon mer avancerad fråga då jag inte har korrekta värden att sätta in.. de kommer autoamtiskt, men clr:en fungerar ej nu pga att saker slutar aldrig att jobba, såsom det nedan: ) Men om jag kör: Det låser sig helt åp denna Nu: Har du reflekterat att båda frågorna borde ge samma resultat. Jo, Nej. Nej jag har inte provar den frågan.. Alla andra tidigare inlagda frågor fungerar ju inte längre.. Hur kan vi göra så de fungerar då? Ska vi lägga till något index för dem? Ok då går vi tillnbaka som det var innan. Men räcker det inte med att jag flyttar ner Time.? Det jobbar förfullt nu.... Medans jag väntar kan jag fråga dig.. Sqlservern som jag ansluter till och kör allt är av version "Standard".. Skulle det vara bättre om vi istället flyttade och lät det köras på en separat servermaskin + att vi använde en bättre version än just "Standard" ?? Standard borde fungera bra. Vilken kod är det som inte fungerar? Menade att denna inte fungerar.. He he my bad. har provkört den.. den är långsammare än min :S när min kördes nyss (med variabler för en viss) så tog den 16sekunder.. Det var extremaste... Kan du på något sätt hjälpa mig att effektivisera denna.. Med indexering el. om skrivning av frågan på något bättre sätt.. Ok, det är bara ett förslag på omskrivning. 6minuter ca tog den första gången.. Har du nått förslag på något index så vi kan få det att gå riktigt fort den jag skrev i första inlägget i denna tråd? Resten av frågorna går blixtsnabbt DEt är ju en "OR" med, då kan man väll ersätta det med UNION ALL och sedan köra en select vidare.. Då tar den väll "rätt" index kanske.. Men jag får inte till det.. Jag lyckades skriva om det själv.. Tog bort "OR" och används istället UNION.. Japp, det var faktiskt lite kul. Du ska ha tusen tack så länge.. Kanske dyker upp lite frågor till :/ Vet du om det finns något sätt att göra så "insättningar" går fortare till databasen? Alltså, det går ganska fort.. Men jag tänkte om det finns något bra sätt som gör det ytterliggare snabbare.. T.ex om man skriver in många många tusen rader, alternativt uppdaterar många tusen.. Jag har installerat mssql standard 2005.. "vafan" hittar man SSMS ?? ingen ikon skapas ju.. Den når du via: nej finns ej där, fast jag installerat allt. laddade ner mssql2005 standard direkt från MS via deras nerladdningssak... För att få snabbare Updates gäller faktiskt index. Vilka rutor (vilka komponeneter) kryssade du för när du installerade? jag avinstallerade innan... kryssade i allt under fliken avancerat Det står såhär nu: Låter konstigt. vad finns i Dev. Edition som jag eventuellt skulle kunna utnyttja och ha nytta av? Allt som SQL Server har att erbjuda. Hmm, funderar.. Men frågan är om det är nått jag har nytta av i utvecklingen som finns i det.. Kolla in dessa för att besluta dig. Hursomhelst så ska det inte vara något speciellt med installationen. Vart hittar man MS SQL Server Agent?? Jag är uppkopplad mot vår databas nu med MS SQL Server Management Studio.. I Object Explorer (Tryck F8) så ligger den längst ner i "trädet". Att lägga till 1000rader genom att generera typ, Hej! >Var kommer dom 1000 raderna ifrån, en fil? Optimera denna sqlfråga..
OR Time > (SELECT MIN(Time) FROM [DATA] Where TableName = @soustr And Time IN
(SELECT TOP (5) Time FROM [DATA] Where TableName = @soustr
And Time < (SELECT ISNULL(Max(Time),'2050-01-01 00:00:00') FROM [DATA] Where TableName = @resstr)
ORDER BY Time DESC))) ORDER BY Time;
@soustr är en variabel som ändras, även lika med @resstr
Hur kan jag optimera denna fråga till max?? All data ligger i samma tabell..
Indexerat TableName -> Time -> Value -> ID
Är det något i frågan ovan som gör att den inte söker när TableName = ... :SSv: Optimera denna sqlfråga..
Men jag hade velat ha det så det gick Direkt typ.. Max 1-2 sek då.. Går inte det :SSv: Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Har två indexerade, det är TabellNamn ASC -> Time DESC -> Value DESC -> ID ASC
Sen även indexerat ID..Sv:Optimera denna sqlfråga..
Sedan ett icke klustrat index på TabellNamn ASC -> Time DESC -> Value DESC -> ID ASC.
Rätt?Sv: Optimera denna sqlfråga..
Jag kanske ska indexera även TabelName -> VALUE -> Time -> ID.. Kanske är det som fattas för att få maximal hastighet..??Sv:Optimera denna sqlfråga..
Kolumnen ID som är primärnyckel och ingår i det klustarde indexet ska inte vara med i ditt index.
Den finns med implicit i alla icke klustrade index som skapas.
Ta bort den.
När det gäller Tablename och VALUE vilket av dom finns det mest respektive minst varianter av?
T.ex du kanske säger att det finns 10 olika VALUE och 20 olika Tablename
Time innehåller den både datum och tid?Sv: Optimera denna sqlfråga..
Okey, jag tar bort det indexet och har bara primärkey där..
>När det gäller Tablename och VALUE vilket av dom finns det mest respektive minst varianter av?
Det finns väldigt mycket av båda.. Jag kan väll lägga till ett index till där jag har TableName -> Value -> Time..
DÅ har jag båda varianterna??Sv:Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Men sedan är det olika om nästa krav är Value=, eller Time=..Sv:Optimera denna sqlfråga..
Byt ut strängen "ditt tabellnamn" (mellan fnuttarna) mot namnet på din tabell.
Skriv in svaret här sedan, så ser jag hur det ser ut.
<code>
DECLARE @tablename nvarchar(125);
SET @tablename = N'ditt tabellnamn';
;WITH get_objectid AS
(
SELECT object_id
FROM sys.objects
WHERE ([name] = @tablename) AND ([type] = 'U')
)
SELECT
a.[name],
a.[index_id],
a.[type_desc]
FROM sys.indexes a
INNER JOIN get_objectid b ON (a.object_id = b.object_id)
ORDER BY a.[type_desc];
</code>Sv: Optimera denna sqlfråga..
Name, Index_id , type_desc
PK_DATA 1 CLUSTERED
IX_DATA 2 NONCLUSTERED
IX_DATA_1 3 NONCLUSTEREDSv:Optimera denna sqlfråga..
Gör om samma igen med den här frågan:
<code>
DECLARE @tablename nvarchar(125);
SET @tablename = N'radio';
;WITH get_objectid AS
(
SELECT object_id
FROM sys.objects
WHERE ([name] = @tablename) AND ([type] = 'U')
)
SELECT
a.[name] AS Indexnamn,
a.[type_desc] [Typ av index],
d.[name] Tabellkolumn
FROM sys.indexes a
INNER JOIN get_objectid b ON (a.object_id = b.object_id)
INNER JOIN sys.index_columns c ON (a.object_id = c.object_id) AND (a.index_id = c.index_id)
INNER JOIN sys.columns d ON (c.object_id = d.object_id) AND (c.column_id = d.column_id)
ORDER BY a.[type_desc], c.key_ordinal;
</code>Sv: Optimera denna sqlfråga..
Index, Typ av index, Tabellkolumn
PK_DATA CLUSTERED ID
IX_DATA NONCLUSTERED ID
IX_DATA_1 NONCLUSTERED TableName
IX_DATA_1 NONCLUSTERED Time
IX_DATA_1 NONCLUSTERED Value
IX_DATA_1 NONCLUSTERED IDSv:Optimera denna sqlfråga..
Så här vill jag att du gör:
1. Ta bort indexet som heter IX_DATA.
2.Ta bort kolumnen ID från indexet som heter IX_DATA_1.
3. Flytta upp Time högst upp i indexet IX_DATA_1.
4. Sätt alla kolumner till sortorder ASC (vilket är default).
5. Bygg ett nytt index där du lägger till Tablename som Index key kolumn (ASC),
och lägger till Time som en Included Column.Sv: Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Tar det flera timmar eller handlar det om nån halvtimme?Sv:Optimera denna sqlfråga..
och lägger till Time som en Included Column.
Vad menar du med att lägga till Time som en included?
Är det alltså att jag indexerar TableName ASC sen sätter -> Time ASC som nästa?
Men jag vill helst ha TIME DESC så jag får senaste först.. Väll lugnt med det oxå?Sv:Optimera denna sqlfråga..
I ditt fall kanske 25 - 60 min beroende på omständigheter.Sv: Optimera denna sqlfråga..
Högerklickar du på "Indexes" under tabellnamnet, och väljer "New Index"?
Behåll ASC SQL Server hittar det den ska ändå.Sv:Optimera denna sqlfråga..
Tryckger höger musknapp på tabbelen och väljer modifiere
Sedan trycker jag höger musknapp på kanten och väljer Indexes/Key där jag sedan sätter..Sv: Optimera denna sqlfråga..
<code>
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE ([name] = 'IX_DATA_2') AND ([type] = 2))
CREATE NONCLUSTERED INDEX [IX_DATA_2] ON [dbo].[DATA]
(
[TableName]
)
INCLUDE
(
[Time]
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
GO
</code>Sv: Optimera denna sqlfråga..
<code>
DECLARE @tablename nvarchar(125);
SET @tablename = N'radio';
;WITH get_objectid AS
(
SELECT object_id
FROM sys.objects
WHERE ([name] = @tablename) AND ([type] = 'U')
)
SELECT
a.[name] AS Indexnamn,
a.[type_desc] [Typ av index],
d.[name] Tabellkolumn,
c.is_descending_key,
c.is_included_column
FROM sys.indexes a
INNER JOIN get_objectid b ON (a.object_id = b.object_id)
INNER JOIN sys.index_columns c ON (a.object_id = c.object_id) AND (a.index_id = c.index_id)
INNER JOIN sys.columns d ON (c.object_id = d.object_id) AND (c.column_id = d.column_id)
ORDER BY a.[type_desc], c.key_ordinal;
</code>Sv:Optimera denna sqlfråga..
Vad får man ut av att köra det sista du skrev? Kan man "konstatera" nått genom det?Sv: Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
PK_DATA CLUSTERED ID
IX_DATA_2 NONCLUSTERED Time
IX_DATA_2 NONCLUSTERED TableName
IX_DATA NONCLUSTERED ID
IX_DATA_1 NONCLUSTERED TableName
IX_DATA_1 NONCLUSTERED Time
IX_DATA_1 NONCLUSTERED Value
IX_DATA_1 NONCLUSTERED IDSv:Optimera denna sqlfråga..
Det får du göra via SQL Server Management Studio.
Finns det en Object Explorer (syns när man trycker F8)?Sv:Optimera denna sqlfråga..
SELECT Time, Value FROM [DATA] Where TableName = 'JLT_B300019_5' AND (Time > DATEADD(minute,-50,(SELECT ISNULL(Max(Time),'1900-01-01 00:00:00') FROM [DATA] Where TableName = '0_327'))
OR Time > (SELECT MIN(Time) FROM [DATA] Where TableName = 'JLT_B300019_5' And Time IN
(SELECT TOP (5) Time FROM [DATA] Where TableName = 'JLT_B300019_5'
And Time < (SELECT ISNULL(Max(Time),'2050-01-01 00:00:00') FROM [DATA] Where TableName = '0_327')
ORDER BY Time DESC))) ORDER BY Time;
tog 5 sekunder :S men många andra går "typ direkt".. vart värderna än är i tabellen ska det ju hittas direkt..Sv:Optimera denna sqlfråga..
Bredvid varje tabell i Object Explorer finns det ett plustecken.
Fäller man ut det så ser man en lista med "mappar" (som i utforskaren).
En sådan heter Indexes.
Den har också ett plustecken bredvid sig.
Fäll ut den så ser du vilka index som finns på tabellen.
Vi är intresserade av indexet som heter IX_DATA_1.
Högerklicka på det ich välj "Properties" (längst ner).
Nu öppnas en dialog som heter "Index Properties".
Där kan man lägga till, ta bort kolumner, och ändra deras position i indexet.Sv: Optimera denna sqlfråga..
När du ändrat indexet, så ska du få en ny fråga att testa.Sv: Optimera denna sqlfråga..
Ta bort kolumn ID (markera och tryck Remove).
Markera kolumn Time, och tryck på "Move Up" så den hamnar överst.
Klart.
Tryck Ok på dialogen.Sv:Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Men nu står ju Time: sort order desc på den.. Sv: Optimera denna sqlfråga..
så fälls en dropdown ut och man kan välja vad man vill. Sv: Optimera denna sqlfråga..
Tyvärr så sa du aldrig vilken av Tablename och Value som hade mest eller minst olika (unika) värden.
Den kolumn som har högst selektivitet, ska vara överst.
Därför har jag lagt Time överst (även med bara datum borde det finnas flest unika).
T.ex om man tittade på dina Value värden så kanske det finns en miljon poster med Value = 1.
1 miljon med Value = 2, o.s.v.
Då finns det 250 olika Value värden.
Är du med?
Det var det jag undrade på Tablename och value.
Går att ta reda på enkelt med en GROUP BY fråga.Sv:Optimera denna sqlfråga..
Så den måste väll vara först indexerad... Sedan är det antingen Value = nått eller Time= nått...
Men varför inte skapa två index, en som hittar value blixtsnabbt när tablename är markerat och en som hittar time blixtsnabbt när tablename finns osv.. ?
*Den jobbar fortfarande med ändringen jag gjrode innan..Sv: Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Inga värden finns under kolumnerna..
Men jag läser lite på nätet.. Det verkar som ett klustrat index är bättre? :SSv:Optimera denna sqlfråga..
Mitt skript, vad gav det på dom andra kolumnerna?Sv: Optimera denna sqlfråga..
IX_DATA_2 NONCLUSTERED Time 0 1
IX_DATA_2 NONCLUSTERED TableName 0 0
IX_DATA_1 NONCLUSTERED Time 1 0
IX_DATA_1 NONCLUSTERED TableName 0 0
IX_DATA_1 NONCLUSTERED Value 1 0Sv:Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Nu jobbar den fortfarande efter 7 minuter..
Jag vill att det ska gå blixtsnabbt :S.
-----
aha, okeySv:Optimera denna sqlfråga..
5 sek. är inte jättelångsamt på 250 miljoner poster.
Tvärtom, så får det mig att undra om 25 milj, 2,5 milj eller 250 000 stämmer bättre?
Hursomhelst, det som vi gjort är inga jätteförändringar, eller garantier för att allt ska gå blixtsnabbt.
Kanske det blir som förut, men det är mer "rätt" nu.
(ännu mer rätt om kolumnerna låg i den ordning de skulle efter selektivitet, men vi struntar i det nu).
Är du med på det?Sv:Optimera denna sqlfråga..
Första frågan kan ta längre tid, det gör dom alltid om du t.ex skulle starta om en server.
Jämfört med hur lång tid dom tar efter andra gången frågan körs..Sv: Optimera denna sqlfråga..
(direkt kopierat från egenskaper på tabellen)
Japp är med på det.Sv:Optimera denna sqlfråga..
Hoppas jag inte missat något när jag skrev om den, den var lite "krånglig" (nästlad).
Så får vi se om den är långsammare, lika snabb eller snabbare än den fråga som du först skrev i forumet.
<code>
DECLARE @max_date datetime;
DECLARE @min_date datetime;
SET @max_date = (SELECT MAX([Time]) FROM [dbo].[DATA] WHERE (TableName = @resstr));
SET @min_date = (SELECT MIN([Time])
FROM [dbo].[DATA]
WHERE [Time] IN (SELECT TOP (5) [Time]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND [Time] < (ISNULL(@max_date1, '2050-01-01 00:00:00'))
ORDER BY [Time] DESC));
SELECT
[Time],
[Value]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND
(([Time] > DATEADD(mi, -50, ISNULL(@max_date1, '1900-01-01 00:00:00'))) OR ([Time] > @min_date))
ORDER BY [Time];
</code>Sv: Optimera denna sqlfråga..
skrev detta innan ajg täntke visa:
Men det står att klustrade index är bra för :
Många av mina frågor hämtar många många rader. Ibland tusentals, ibland tiotusentals.. Men vissa gånger även tiotal eller hundratalet..
Men det är "enkla" frågor. Alltid TableName = först.. Då ska ju den vara indexerat så den hittar direkt? Sedan TÄNKTE jag att man bör ha både Value efter, så den hittar om man sätter ett Value -villkor.. Men sedan även Time.. Alltså man har två index , ett för TableName -> Value.. Sen ett TableName -> Time..
Är inte det smart så det går fort att hitta??
---
Klustrade index är bra för
- Frågor där du har ett brett spektra på din fråga, exempelvis då du använder between, , order by, join, group by, men även vid sum(), count() osv.
- Frågor där du behöver hämta en unik post (användarid exempelvis). Detta eftersom de data du hämtar ut direkt finns att tillgå.
- Frågor där du hämtar många rader. Det är av samma anledning som vi nämnt tidigare. Datan finns direkt åtkomlig från indexet och behöver inte hämtas genom en extra sökning.
- Ökande kolumner, såsom identity (int) och datum.Sv:Optimera denna sqlfråga..
När jag inte har indexerat TableName som första så söker den genom 207 miljoner rader (som max) för att hitta rätt ju.. Måste vara därför det tar sådan tid..
Vi satte ju TIME :S som första.. Vi måste ha TableName Först...??Sv: Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Det har du redan på ID.
Vad händer om du kör din gamla fråga och min fråga separat?
Utan din CLR SP.Sv:Optimera denna sqlfråga..
SELECT Top(1) [Time] FROM [DATA] where TableName='JLT_T100001_noll' order by Time desc
NU jobbar den och tar "aldrig" slut..Sv: Optimera denna sqlfråga..
SELECT max (Time) FROM [DATA] where TableName='JLT_T100001_noll'
Så går det direkt däremot..Sv:Optimera denna sqlfråga..
SELECT max(Time) FROM [DATA] where TableName='Q1_T300016_noll'
Tar jag bort max ovan så finns det bara ett värde vilket det hittar direkt..
Men när jag skriver som ovan så jbobar den och tar aldrig slut.
Vi måste fixa indexeringen........ :(Sv:Optimera denna sqlfråga..
Fast TOP() och ORDER BY är mycket kostsamma.
I den ena frågan säger du ge mig det största värdet när tabellnamnet = 'JLT_T100001_noll'
Den andra frågan gör samma fast där ska den först hämta alla sedan sortera dom så att den senaste (vilket är lika med MAX()) kommer överst och sedan ge dig den översta.
Den typen av frågor kommer alltid att kosta prestanda. Sv: Optimera denna sqlfråga..
Men vad händer om jag skapar två index av följande utseende:
TableName ASC -> Time desc -> Value desc -> Id asc
sedan skapar jag ett till om jag har value med i where istället för time,
TableName ASC -> Value desc -> Time desc -> ID asc..
Det borde göra att mina frågor hittar vad jag söker blictsnabbt??Sv:Optimera denna sqlfråga..
Men om du vill, ta bort det indexet som jag la dit, och flytta tillbaka time där det låg förut.
Prova sedan igen.
Har du provat min fråga som jag skrev om från din?
Om inte gör det innan du ändrar något index.Sv: Optimera denna sqlfråga..
Du "måste" hjälpa mig med nått... :S Sv:Optimera denna sqlfråga..
Kör dessa.
Då tar vi bort det som du skapade (går jättefort).
Sedan lägger vi till det som du tog bort.
Sedan går du in i Object Explorer och flyttar ner Time under Tablename, och lägger till ID sist.
Då är det precis som när vi började.
Hör av dig när det är klart.
<code>
DROP INDEX IX_DATA_2 ON [dbo].[DATA];
GO
CREATE NONCLUSTERED INDEX [IX_DATA] ON [dbo].[DATA]
(
[ID]
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
GO
</code>Sv: Optimera denna sqlfråga..
Det borde vara klart snart med nerflyttningen av Timer. Då ser indexet ut som:
TableName ASC -> Time DESC -> Value DESC -> ID ASCSv: Optimera denna sqlfråga..
Min andra fråga är SQL Jobs Agent, el. vad det heter nu.. Det finns inte i "Standardversionen" eller? Jag hittar ej den...Sv:Optimera denna sqlfråga..
En separat servermaskin låter bra om du menar att SQL Server körs separat på den.
Då behöver den inte konkurrera om resurser med andra applikationer.
SQL Server Agent finns i standardversionen, men inte i Express.
Uppfatade det som att du använde SqL Server Management Studio Express.
Installera Standard (av SSMS) istället. Sv: Optimera denna sqlfråga..
Ssms standard, vart hittar jag den? Jag hittar ej..
Din kod du skrev om ovan fungerar ej.. Sv:Optimera denna sqlfråga..
Menar du:
<code>
DROP INDEX IX_DATA_2 ON [dbo].[DATA];
GO
CREATE NONCLUSTERED INDEX [IX_DATA] ON [dbo].[DATA]
(
[ID]
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
GO
</code>
Testa en i taget, så här.
Först:
<code>
DROP INDEX IX_DATA_2 ON [dbo].[DATA];
</code>
Sedan:
<code>
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE ([name] = 'DATA') AND ([type] = 2))
CREATE NONCLUSTERED INDEX [IX_DATA] ON [dbo].[DATA]
(
[ID]
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
</code>
Standard får man betala för så, om ni har en standardversion snurrande så har ni väl programmet någonstans.
Den finns inte att ladda ner.Sv: Optimera denna sqlfråga..
DECLARE @max_date datetime;
DECLARE @min_date datetime;
SET @max_date = (SELECT MAX([Time]) FROM [dbo].[DATA] WHERE (TableName = @resstr));
SET @min_date = (SELECT MIN([Time])
FROM [dbo].[DATA]
WHERE [Time] IN (SELECT TOP (5) [Time]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND [Time] < (ISNULL(@max_date1, '2050-01-01 00:00:00'))
ORDER BY [Time] DESC));
SELECT
[Time],
[Value]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND
(([Time] > DATEADD(mi, -50, ISNULL(@max_date1, '1900-01-01 00:00:00'))) OR ([Time] > @min_date))
ORDER BY [Time];
Den klagar till börja på,
Msg 137, Level 15, State 2, Line 10
Must declare the scalar variable "@max_date1".
Msg 137, Level 15, State 2, Line 18
Must declare the scalar variable "@max_date1".Sv:Optimera denna sqlfråga..
Har glömt att ändra variabelnamnet.
Nu så.
<code>
DECLARE @max_date datetime;
DECLARE @min_date datetime;
SET @max_date = (SELECT MAX([Time]) FROM [dbo].[DATA] WHERE (TableName = @resstr));
SET @min_date = (SELECT MIN([Time])
FROM [dbo].[DATA]
WHERE [Time] IN (SELECT TOP (5) [Time]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND [Time] < (ISNULL(@max_date, '2050-01-01 00:00:00'))
ORDER BY [Time] DESC));
SELECT
[Time],
[Value]
FROM [dbo].[DATA]
WHERE (TableName = @soustr) AND
(([Time] > DATEADD(mi, -50, ISNULL(@max_date, '1900-01-01 00:00:00'))) OR ([Time] > @min_date))
ORDER BY [Time];
</code>Sv: Optimera denna sqlfråga..
Din körs fortfarande och är uppe i 1,5 minSv:Optimera denna sqlfråga..
Många av frågorna ser jag tar 24 sekunder, 16sekunder.. Och vissa tar 0 sek.. Men det fungerar inte när endel tar sådan tid som ovan..
cmd = New SqlCommand("SELECT Time, Value FROM [DATA] Where TableName = @soustr AND (Time > DATEADD(minute,-50,(SELECT ISNULL(Max(Time),'1900-01-01 00:00:00') FROM [DATA] Where TableName = @resstr)) " _
& " OR Time > (SELECT MIN(Time) FROM [DATA] Where TableName = @soustr And Time IN " _
& " (SELECT TOP (5) Time FROM [DATA] Where TableName = @soustr " _
& " And Time < (SELECT ISNULL(Max(Time),'2050-01-01 00:00:00') FROM [DATA] Where TableName = @resstr) " _
& " ORDER BY Time DESC))) ORDER BY Time;", conn)
Sv:Optimera denna sqlfråga..
Bara för säkerhets skull, prova den två ggr, och se skillnaden mellan körningarna.
Första gången man kör en fråga kan det ta kanske 1,5 min andra ggn 2-4 sek.
Det indexet som jag ville du skulle göra var för just denna fråga, utan det så blir det nog långsammare.Sv: Optimera denna sqlfråga..
Andra gången körs nu och den pågår.. tiden är än så länge 1min.... Så den är mycket långsammare.
4min sammanlagt andra gången... Sv:Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Eller om du har något bättre förslag..
SELECT Time, Value FROM [DATA] Where TableName = @soustr AND (Time > DATEADD(minute,-50,(SELECT ISNULL(Max(Time),'1900-01-01 00:00:00') FROM [DATA] Where TableName = @resstr))
OR Time > (SELECT MIN(Time) FROM [DATA] Where TableName = @soustr And Time IN
(SELECT TOP (5) Time FROM [DATA] Where TableName = @soustr
And Time < (SELECT ISNULL(Max(Time),'2050-01-01 00:00:00') FROM [DATA] Where TableName = @resstr)
ORDER BY Time DESC))) ORDER BY Time; Sv:Optimera denna sqlfråga..
DÅ fick jag fram det DIREKT... :DSv:Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Startmenyn->Alla Program->Microsoft SQL Server 2005->SQL Server Management Studio.Sv: Optimera denna sqlfråga..
gick inte installera det först, kom upp felmeddelande.. man fick manuellt ladda ner dotnetfx och krabba för att få det att installerasSv: Optimera denna sqlfråga..
Servern använder även index för att hitta rader som ska uppdateras.
Sedan är det så att ju mer index man skapar (för att få snabbare läsning och uppdatering)
desto långsammare går skrivningarna (INSERT).
Det är en klassisk balansgång, som man får känna/testa sig fram för att hitta den "optimala"
Hämtar du rader från en annan tabell när du skriver in flera tusen rader?Sv:Optimera denna sqlfråga..
Avinstallera Express först.Sv: Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
To change an existing instance of Microsoft SQL Server 2005 to a different edition of SQL Server 2005, you must run SQL Server 2005 Setup from the command prompt and include the SKUUPGRADE=1 parameter.
Hur göra? :SSv: Optimera denna sqlfråga..
Har aldrig gått den vägen som du går nu.
Varför vill den ändra en befintlig installation om du har avinstallerat?
Avinstallerade du allt?
Startade du om efteråt?
Eftersom du kan ladda ner från MS, och du håller på med utveckling, så tycker jag att du ska installera Developer edition (den har jag).
Motsvarar alla varianter (även Standard).Sv:Optimera denna sqlfråga..
Ja, jag avinstallerade allt. det Tror jag.. Startade nog inte om däremot..Sv: Optimera denna sqlfråga..
Kanske overkill om du inte ska hållla på med sådant.Sv:Optimera denna sqlfråga..
Sv: Optimera denna sqlfråga..
http://www.microsoft.com/Sqlserver/2005/en/us/compare-features.aspx
http://www.microsoft.com/sqlserver/2005/en/us/developer.aspxSv: Optimera denna sqlfråga..
Kryssa i Server komponenter och tools (tror jag, minns inte nu).
Sen ska genvägen finnas där jag skrev förut.
Lycka tillSv: Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
Sv:Optimera denna sqlfråga..
BEGIN
INSERT ...
INSERT ...
...
...
END
sedan skicka in detta och exekuera..
ELLER! om man skickar en och en direkt, typ.
for i = 1 to 1000
INSERT ....
next
Vilken går fortast om man jämför där? Det körs som CRL..
Varför jag frågar är att metoden ska lägga in 1000 värde-rader i tabellen. Varför värderad består av
tablename = 'nått', time=, value=..Sv:Optimera denna sqlfråga..
Grymt mycket nu har nästan ingen tid för något annat.
Har du hittat SQL Agenten?Sv:Optimera denna sqlfråga..
>Leta efter bulk copy?
Den loopar för att skriva in vissa saker,. det kan ibland handla om väldigt många värden..