Är denna SQL effektiv??
Efter en del tips, så har jag ändrat i min databas och kommit fram till följande SQL.
Verkar den bra uppbyggd?
<code>
use melodistatestikSQL
SELECT t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
t_Kategori.Kategori,
t_Album.Album,
t_forfattare.namn,
t_SongTitlar.Stim,
t_SongTitlar.Hide,
t_SongTitlar.Anteck
FROM t_Kategori INNER JOIN
(t_Album INNER JOIN
((t_songtitlar LEFT JOIN t_songforfattare
ON t_songtitlar.ArrNo = t_songforfattare.ArrNo)
LEFT JOIN t_Forfattare
ON t_songforfattare.for_id = t_forfattare.for_id)
ON t_Album.CD_ID = t_SongTitlar.Album)
ON t_Kategori.Kat_ID = t_SongTitlar.Kategori
</code>
Den fungerar i QA.
Svara
Sv: Är denna SQL effektiv??
Strängen ser riktigt bra ut.. Tvivlar på att du kan få den mycket effektivare än så.
Svara
Sv: Är denna SQL effektiv??
Du påverkar hur effektiv frågan är med vilka fälttyper och index du har. Tycker jag du ska sätta dig in i.
Svara
Sv: Är denna SQL effektiv??
Den ser väl korrekt ut ja, som Andreas sa så påverkar du prestandan genom att skapa och utnyttja rätt index. Men varför skriver du joinarna så oläsligt? Jämför din SQL-sats med nedanstående, som är exakt samma, bara snyggat till ordningen av joinarna lite samt tagit bort alla förvirrande parenteser.
<code>
SELECT t_SongTitlar.ArrNo,
t_SongTitlar.songtitel,
t_Kategori.Kategori,
t_Album.Album,
t_forfattare.namn,
t_SongTitlar.Stim,
t_SongTitlar.Hide,
t_SongTitlar.Anteck
FROM t_Kategori
INNER JOIN t_songtitlar
ON t_Kategori.Kat_ID = t_SongTitlar.Kategori
INNER JOIN t_Album
ON t_Album.CD_ID = t_SongTitlar.Album
LEFT JOIN t_songforfattare
ON t_songtitlar.ArrNo = t_songforfattare.ArrNo
LEFT JOIN t_Forfattare
ON t_songforfattare.for_id = t_forfattare.for_id
</code>
Den går från tabell till tabell, kategori joinas med songtitlar (och så villkoret för det), songtitlar joinas med album (och villkoret för det), osv. Mycket lättare att läsa, imho.
Svara
Sv: Är denna SQL effektiv??
OK, ser betydligt bättre ut,
Den här typ av SQL är ju väldigt svåra, så jag var bara glad att jag fick den att fungera...
När det gäller indexering, så har jag inte lagt in det i något fält, jag antar att det är som i Access, primärnycklarna blir indexerade. Finns det någon anledning att indexera mer?
Datatyperna i SQL-Server har jag fortfarande väldigt svårt för, hade det varit i Acces(forfarande) så tror jag nog att jag har det på mina fem, men...
Några förslag?
Svara
Sv: Är denna SQL effektiv??
Parantesr är obligatoriska för JET motorn. Kan inte parsa frågan utan dem. Så tyvär måste man leva med dem.
Svara