FAQ |
Kalender |
|
![]() |
#1 | ||
|
|||
Mycket flitig postare
|
Hmmm. Ser inte ut att göra någon skillnad när jag kör EXPLAIN på den i alla fall.
Problemet verkar ju ligga i att den gör full table scan på catraws-tabellen för varje rad i category-tabellen. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Klarade millennium-buggen
|
Du joinar mellan catraws och categories på två olika sätt, kan vara det som stökar till det.
Full table scan får man leva med ibland. men jag trodde att det vara den temporära tabellen som var ditt stora problem? |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Har du satt index i båda tabellerna dvs både på Främmande nyckel och primärnyckel? Det kan ha betydelse när SQL ska söka efter en FK (Forreign Key).
Ett vanligt problem är att man glömmer att indexera Främmande nycklar, det finns de som kör utan primärnycklar också. Kolla hur dina sammansatta index ser ut dvs om du har fler kolumner i ett och samma index eller primärnyckel. Kolla att du har samma ordning i JOIN och WHERE satser. Kolla även att du har det mest diskriminerande värdet först, och sen i fallande skala... Senast redigerad av Conny Westh den 2011-03-11 klockan 00:26 |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Har WN som tidsfördriv
|
Jag skulle nog se över databasdesignen i allmänhet.
Citat:
Senast redigerad av Adestro den 2011-03-11 klockan 10:03 |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Ta Currency som har en internationellt standardiserad 3-ställig valutakod SEK, NOK; USD; EUR mfl dessa passar betydligt bättre som primärnycklar än ett orelaterat heltalsvärde. |
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Administratör
|
Citat:
__________________
eldefors.com - Personlig (teknik)-blogg |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Klarade millennium-buggen
|
Citat:
När man bygger en databasstruktur i en relationsdatabas så är det viktigaste att man får en inbyggd kvalitetskontroll på informationen man lagrar. Då är naturliga primärnycklar en naturlig del av det arbetet. Främmande nycklar som då länkar till primärnycklar är en annan del. Atomära egenskaper ytterligare en. Att följa normalformernas definitioner ytterligare en. Att använda syntetsiska primärnycklar ska manundvika och endast använda i de fall när det inte finns en naturlig primärnyckel eller där en naturlig primärnyckel kommer att bestå av orimligt många kolumner (typ; >7 kolumner). Den "prestandavinst" man vinner på att använda syntetiska PK är oftast så marginell att den inte är värd att beakta, i de flesta fall. Man förlorar så otroligt mycket mer vad gäller den inbyggda kvalitetskontrollen av information när man gör det. Använder man naturliga PK så kan man som människa utföra okulärbesiktning av data på ett enklare sätt än med syntetiska PK. Du kan m a o direkt se om set står NOK i en kolumn där du för väntar dig att det ska stå SEK, men om det står 4 i stället för 7 så finns det inget naturligt sätt för en människa att avgöra om informationen är korrekt eller inte. Man måste ha mycket mer komplexa sätt att kontrollera om informationen är korrekt och det innebär att det är lättare att man får strukturella fel i sin databas och sina applikationer. Senast redigerad av Conny Westh den 2011-03-14 klockan 11:00 |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Har WN som tidsfördriv
|
Citat:
![]() Vilken databasdesign som passar bäst beror ju på hur databasen ska användas. Men använder man ett RDBMS är man antagligen intresserad av att efterleva ACID. Annars ska man nog titta på andra databassystem med andra sätt att lagra data. Du säger: "När man bygger en databasstruktur i en relationsdatabas så är det viktigaste att man får en inbyggd kvalitetskontroll på informationen man lagrar.". Det är ju just det man åsidosätter genom att göra som du föreslår? Genom att acceptera redundans ber man om dataanomalier i databasen. För att inte tala om prestandakostnaden att i beräkningar jämföra VARCHAR med VARCHAR jämfört med INT med INT... Senast redigerad av Adestro den 2011-03-14 klockan 18:39 |
||
![]() |
![]() |
![]() |
#9 | ||||
|
|||||
Administratör
|
Jag skulle påstå att prestandaoptimering alltid är ett självändamål. Oavsett om det är 1 eller 1 miljon användare vill man ha en rapp databas som inte tar onödigt mycket resurser i anspråk. Skalbarhet är den viktigaste relaterade aspekten, men den blir oväsentlig vid för dålig prestanda då lösningen blir för kostsam för att skala upp.
Citat:
Citat:
Citat:
Citat:
__________________
eldefors.com - Personlig (teknik)-blogg |
||||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Medlem
|
Man kan inte säga att man generellt ska undvika syntetiska primärnycklar.
Jag säger tvärtom , undvik naturliga primärnycklar i 9 fall av 10. Speciellt viktigt då det är flera kolumner, tänk att göra en många-till-många relation, givet att du har t.ex två PK bestående av 4 kolumner så får du du 8 kolumner i kopplingstabellen jämfört med två kolumner om du kör syntetiska primärnycklar. Det där med anomalier med syntetiska PK förstår jag inte, man är med det 100% säker på att man inte har dubletter. Och självklart har man foreign key constraints och valideringar av data ändå. En primärnyckel ska vara unik och inte ha en mening, då denna "mening" kan ändras, personnummer är ett exempel. Vad gäller prestanda så är joins mellan char avsevärt mycket slöare jämfört med integers. Så pass att det kan orsaka upplevd seghet med mycket data. Och vad gör man då, designar om databasen? Njae.... |
||
![]() |
![]() |
Svara |
|
|