Kom ihåg mig?
Home Menu

Menu


Är detta någon skillnad?

 
Ämnesverktyg Visningsalternativ
Oläst 2013-02-13, 20:24 #1
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
Standard Är detta någon skillnad?

Vill bara veta det en gång för alla. Alltid grubblat på det.

Är
PHP-kod:
SELECT FROM trade JOIN items ON trade.part items.id ORDER BY posted ASC 
samma som
PHP-kod:
SELECT FROM trade JOIN items ON items.id trade.part ORDER BY posted ASC 
?
secag är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-13, 21:01 #2
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
Nej, det ska det inte vara. SQL-motorn ska optimera detta automatiskt och därmed välja att använda indexet på items.id eftersom det bör vara pk i tabellen items, men den måste absolut vara indexerad med unikt index. Värdet från trade.part behöver inte vara indexerat i den här frågan, men jag skulle nog lägga ett non-unikt index på den i alla fall. Det brukar jag göra på alla fk. eftersom det sker uppslag mot dem hela tiden.

Senast redigerad av Conny Westh den 2013-02-13 klockan 21:04
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-14, 06:15 #3
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
gregoff gregoff är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2010
Inlägg: 658
Bör båda i en loop som varvar 100000 ggr och jämför tidsskillnaden. Se till att du gör det utan att det finns annat som belastar databasen under tiden bara.

Gör du testet flera gånger så kommer du troligen se att det diffar marginellt åt det ena och det andra hållet från gång till gång.
gregoff är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-14, 13:44 #4
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
Tack conny!
Kan man skriva querys på detta sätt? Har ej fått någon bra uppfattning om vad som gäller när man vill hämta saker i en annan tabell(computer, items) beroende på ett värde i den första tabbellen(trade)

PHP-kod:
SELECT 
FROM trade
IF(trade.part == 0) {
    
JOIN computer 
    ON trade
.part computer.id
} else { 
    
JOIN items 
    ON trade
.part items.id
}
ORDER BY trade.posted ASC 
secag är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-15, 07:10 #5
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 secag Visa inlägg
Tack conny!
Kan man skriva querys på detta sätt? Har ej fått någon bra uppfattning om vad som gäller när man vill hämta saker i en annan tabell(computer, items) beroende på ett värde i den första tabbellen(trade)

PHP-kod:
SELECT 
FROM trade
IF(trade.part == 0) {
    
JOIN computer 
    ON trade
.part computer.id
} else { 
    
JOIN items 
    ON trade
.part items.id
}
ORDER BY trade.posted ASC 
Jag är inte riktigt säker på vad du vill få ut, men om jag tolkar dig rätt så kan denna kod vara en hjälp på traven.

Jag har bytt namn på kolumnerna som bara heter id i din kod och lagt till tabellens namn på dem så man ser vad det är för id.

Kod:
	SELECT part, trade_desc, posted 
	FROM trade
	JOIN computer ON trade.part = computer.computer_id
	WHERE trade.part = 0

UNION

	SELECT part, trade_desc, posted 
	FROM trade
	JOIN items ON trade.part = items.items_id
	WHERE NOT trade.part = 0

ORDER BY posted ASC
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-14, 16:23 #6
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Båda värdena i ON-avsnittet bör ju vara index samtliga fall om man har en vettig databasdesign och skriver vettiga frågor.

Jag tycker det känns mest logiskt att kolumnen i tabellen som joinas först. Detta är för att jag tycker det känns mest logiskt och semantiskt korrekt att ha det "okända" värdet först och värdet man testar emot sist. Jämför med vanliga IF-satser - Där skriver jag mycket hellre if($var === TRUE) än if(TRUE === $var) av samma anledning. Med detta är vad jag vet inget som påverkar prestandan på något sätt, utan det är bara min preferens.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-02-14, 17:05 #7
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
secag secag är inte uppkopplad
Medlem
 
Reg.datum: Nov 2012
Inlägg: 211
Hittade en intressant sida
http://maettig.com/code/php/php-perf...benchmarks.php

Men en del av databasdesignen ser ut såhär:

trade är en tabell som håller datorer eller datordelar(som bestäms av trade.part).
Om trade.part == 1(det är en data) Annars en datordel.

Beroende på vilket det här hämtar man data om datordelen eller datorn(namn, egenskaper osv..).
secag ä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 05:15.

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