WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Är detta någon skillnad? (https://www.wn.se/forum/showthread.php?t=1056824)

secag 2013-02-13 20:24

Ä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 

?

Conny Westh 2013-02-13 21:01

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.

gregoff 2013-02-14 06:15

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.

secag 2013-02-14 13:44

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 


pelmered 2013-02-14 16:23

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.

secag 2013-02-14 17:05

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..).

Conny Westh 2013-02-15 07:10

Citat:

Ursprungligen postat av secag (Inlägg 20462496)
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



Alla tider är GMT +2. Klockan är nu 05:05.

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