Avatar billede aske2 Nybegynder
12. januar 2015 - 19:03 Der er 7 kommentarer

Forskellen på de 2 select sætninger

Hej eksperter

Er der mon en, der kan hjælpe mig med en forklaring på forskellen på nedenstående to selectsætninger, der returnerer det samme?

Jeg havde lavet den første og kunne ikke få det til at fungere. Jeg oprettede derfor et spørgsmål her og fik hjælp. Jeg fik dog også at vide, jeg burde bruge en JOIN. Det har jeg så arbejdet på, og det lykkedes med en INNER JOIN, men...

Nu er det jo, jeg godt kunne tænke mig en forklaring på, hvad forskellen er. Den første virker meget mere overskuelig, og de returnerer jo det samme...

select title from book where isbn =
(select isbn from author_book where anum =
(select anum from author where name = "Jennifer Widom"));

SELECT book.*
FROM book
INNER JOIN author_book
on book.isbn=author_book.isbn
INNER JOIN author
on author.anum=author_book.anum
WHERE name = "Jennifer Widom"

På forhånd tak og fortsat god aften :)
Avatar billede claes57 Ekspert
12. januar 2015 - 20:04 #1
i den første får du kun titel - og ikke tabellens øvrige felter. Det bør være lettere for server at håndtere, og dermed hurtigere svartid.

i den anden er kaldet optimeret til databasen, så det burde virke hurtigere.

Så prøv med
SELECT book.title
i sætning 2, og
select * from book where isbn =
i sætning 1, og mål svarhastigheder.
Avatar billede aske2 Nybegynder
12. januar 2015 - 20:42 #2
claes57 >

Ups det var en tanketorsk. Jeg er med på forskellen i, hvad der returneres fra de to forskellige selecter.

Jeg har forsøgt at måle lidt, men.. PhyMyAdmin returnerer ikke umiddelbart execution time, og så har jeg forsøgt i SQL Fiddle, men svartiderne virker ikke pålidelige.

Men du siger altså, at kaldet er optimeret til databasen, når der benyttes join - i modsætning til den anden sætning, hvor der er select i select?
Avatar billede claes57 Ekspert
13. januar 2015 - 03:36 #3
Sådan har jeg lært det. Men det skal måske være på langsomme cpu'er og store datamængder før der reelt kan måles forskel. Kan være gammel og ubrugelige fordomme.
Avatar billede arne_v Ekspert
20. januar 2015 - 03:21 #4
I den foerste version skal det foerste = ikke vaere IN ?

Ellers tror jeg at du faar problemer hvis forfatter har skrevet mere end en bog.
Avatar billede arne_v Ekspert
20. januar 2015 - 03:22 #5
Du kan starte performance analyse med at koere EXPLAIN paa dem og se om MySQL overhovedet behandler dem forskelligt.
Avatar billede arne_v Ekspert
20. januar 2015 - 03:22 #6
Hvis du vil maale performance saa skal du nok have rigtigt mange raekker. Du kan jo starte med en million og se om det er nok.
Avatar billede aske2 Nybegynder
23. januar 2015 - 10:14 #7
Jeg skal nok vende tilbage til denne, men jeg ligger vandret i øjeblikket og har derfor ikke haft tid til at kigge mere på det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester