Kom ihåg mig?
Home Menu

Menu


UPDATE och SELECT i samma query (MySQL)

 
Ämnesverktyg Visningsalternativ
Oläst 2011-01-11, 20:53 #11
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av Linuus Visa inlägg
Tar tillbaka det jag sa...hade visst fel!
Mixtrade lite med mina INDEX och nu verkar faktiskt min VIEW gå att använda utan längre väntetider.

Tack för det
Vid ett par tusen bör det inte ge några problem, men det är inte effektivt. Din första lösning med denormalisering är desto effektivare. Nosnajs query är enklaste och effektivaste sättet att uppdatera den. Men om man har väldigt många rader är det prestandamässigt bättre att dela upp den i X queries med ranges (ej en för varje brand) och köra dem med liten tidsintervall emellan.

Att spara denormaliserad data gör inte att man inte sparar och får nästan all nytta av normaliserade datan. Den stora nackdelen du får är att uppdatera den denormaliserade datan manuellt vilket ger en liten liten overhead vid skrivning. Att inte spara denormaliserad data ger däremot i många fall, liksom ditt, en rejäl overhead vid läsning. Skapar man en vy får man allt för ofta ännu mer overhead vid varje skrivning om den cachas då hela vyn invalideras med skrivning till någon tabell den beror på. Alternativt cachas inget och du får rejält med overhead vid varje läsning då du får läsa mer data, oavsett hur väl din indexering är genomgången.

I ditt fall går säkerligen din lösning bra - men jag ville ändå inflika med detta då jag tyckte din första lösning var rätt väg att gå.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-11, 21:24 #12
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av nosnaj Visa inlägg
Nyfiken vad folk använder dessa till då jag i princip aldrig använder mig utav dom.
Isolera/samla kunskap om systemet eller verksamheten
Vyer och för den delen SPn är mycket praktiska att använda om man vill ändra innehållet utan att ändra gränssnittet mot sin applikation.

Har man en vy som heter "topsales_view" så kan man skriva:

Kod:
SELECT productid, productname, salescount, salesamount, performancepoints, area, salesperson
FROM topsales_view
Men man kan när som helst förfina hur detta räknas ut och hur det sorteras redan i vyn. Detta utan att någon applikation som använder vyn behöver uppdateras.

Helt enkelt göra det enklare för utvecklaren!

Dölja komplexitet=mindre buggar
Ett annat användningsområde är om man har komplexa frågor som man anropar på flera ställen i sina applikationer, eller från flera applikationer så kan man samla komplexiteten i vyn och dölja den för applikationsutvecklaren, vilket minskar risken för buggar.

Prestanda
Prestandamässigt är både vyer och SPn generellt snabbare än dynamisk SQL eftersom frågorna förkompileras när man skapar sina vyer, SPn och de optimeras därmed av SQL-compilatorn.

Behörigheter
Man kan även styra behörigheter genom att endast tillåta att vissa applikationer enbart får komma åt att läsa (SELECT) på vissa vyer eller SPn och spärra direktåtkomst till övriga fysiska tabeller.

Enklare felsökning
Eftersom alla verksamhetsregler kan samlas på ett ställe som fysiskt ligger nära datat, så blir det enklare att hitta fel och åtgärda dem utan att kompilera om och distribuera ut updaterad applikationsprogramvara.

Renare och tydligare gränssnitt gentemot applikationerna

Senast redigerad av Conny Westh den 2011-01-12 klockan 09:52
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 06:57 #13
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Citat:
Ursprungligen postat av Linuus Visa inlägg
Tack för svaren

Såhär blev min query till slut

Kod:
UPDATE `brands` b
SET b.prod_count = (
	SELECT count(brand_id)
	FROM `products` AS p
	WHERE b.brand_id = p.brand_id
);
Och det verkar ha blivit rätt
Varför har du med ett AS i subqueryn men inte i queryn?
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 06:59 #14
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Citat:
Ursprungligen postat av ConnyWesth Visa inlägg
Dölja komplexitet=mindre buggar
Eller så får du fler problem och jobbigare felsökning eftersom logiken finns även i datalagret.
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 08:53 #15
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Citat:
Ursprungligen postat av jonny Visa inlägg
Varför har du med ett AS i subqueryn men inte i queryn?
Det bara blev så... Jag var inte så noga då det bara är en query om ska köras EN gång.

Men vad är det för skillnad? Jag får exakt samma resultat om jag kör AS i queryn också.

Senast redigerad av Linuus den 2011-01-12 klockan 08:57
Linuus är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 09:25 #16
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Citat:
Ursprungligen postat av Linuus Visa inlägg
Det bara blev så... Jag var inte så noga då det bara är en query om ska köras EN gång.

Men vad är det för skillnad? Jag får exakt samma resultat om jag kör AS i queryn också.
Det var just det som var min poäng - AS bör vara helt irrelevant och det går lika bra utan men du har med det på ett ställe och inte på det andra. Det är bra att vara enhetlig för att slippa skumma problem.
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 09:30 #17
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Citat:
Ursprungligen postat av jonny Visa inlägg
Det var just det som var min poäng - AS bör vara helt irrelevant och det går lika bra utan men du har med det på ett ställe och inte på det andra. Det är bra att vara enhetlig för att slippa skumma problem.
Absolut. Tack
Linuus är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-12, 09:48 #18
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av jonny Visa inlägg
Eller så får du fler problem och jobbigare felsökning eftersom logiken finns även i datalagret.
Tvärtom så får man enklare felsökning om man lägger affärsreglerna så nära datat som möjligt, då finns reglerna bara på ett ställe istället för att man ska lägga dem i varje klientapplikation man utvecklar.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017