Gå til innhold

Bok om optimalisering av sql queries.


Anbefalte innlegg

Skrevet

For ei veke sidan så skreiv eg ein sql query kjapt som var vanvittig treig, men funka. Men den måtte optimaliseras fordi den kunne ta oppimot ein time for å bli ferdig.

 

Etter nokre timers arbeid idag så greide eg å få den samme spørringa bli utført på nokre sekunder. Men dette er eit felt eg absolutt trenger meir forståelse over.

 

Googling var heilt håplaust om dette, det var enten for enkelt eller altfor komplekst med forhåndskrav over diverse matematiske eigenskaper som eg må lære først.

 

Så fasiten då er ein fagbok som handler om optimalisering av sql queries, som er beregna for meir videregåenda språk og stiller seg nøytral til dei forskjellige databasene som Oracle, SqlServer osv. Tips? :)

Videoannonse
Annonse
Skrevet

Hvilken database er det snakk om da? Du skriver du vil ha en som er nøytral ift Oracle, SQL Server osv, men det tror jeg er en dårlig ide. Du vil jo _optimalisere_ - og da vil du spesialisere deg, ikke generalisere.

 

Jeg har jobba mest med SQL Server og der har Microsoft Press mange bra bøker!

Skrevet

Jobber mest mot Oracle, delvis SqlServer også ein gong i blant mot andre.

 

Trudde SQL queries handla meir om mengder, filtrering og rekkefølger. Spessielle funksjoner for enda betre optimalisering er jo greit det, men då blir det vell fleire bøker :)

Skrevet

Ja, men spørringene bør jo utformes slik at de utnytter de andre mekanismene i databasen best mulig. Der kan det være forskjeller, jeg har aldri jobba med Oracle.

 

Er det store datamengder bør du selvfølgelig se på indekser, sortering og evt datatyper. Og ikke minst unngå opplagte blemmer som å velge kolonner du ikke trenger, utføre unødige operasjoner på datasettet under uthenting og lignende.

 

I SQL Server har du noe som heter "Show Execution plan" - det viser hvordan databasen behandler spørringen, veldig nyttig for å forstå gangen i det hele :) Er helt sikkert noe lignende i Oracle...

 

Beklager at jeg ikke har noen direkte referanser til bøker som er å anbefale. Jeg har tatt MCTS-kurs på SQL Server og det anbefales i hvertfall!

Skrevet (endret)

Man må lære seg å bruke verktøyene som følger med databasen du bruker. Som nevnt kan du få vist execution planen databasen skal utføre, der ser du gjerne HVA i queryen din som går tregt, så du slipper å gjette deg fram. Disse verktøyene er ikke plattformnøytrale, men plattform spesifike. Dataene de oppgir er relativt like dog...

 

Hva du skal gjøre for å få det til å gå kjappere er ikke alltid like opp av dage. Noen ganger støter man jo borti problemer med query optimizeren til databasen...

Endret av blackbrrd
Skrevet (endret)

"The Art of SQL" er kanskje verdt å se på.

 

Boka er temmelig overfladisk, men gir en bra innføring i hvordan dagens databasemotorer fungerer. Den er databasenøytral, og tar for seg indeksering, litt om organisering av dataene, strukturering av spørringer, samt noen kapitler om mer spesifikke emner.

 

Boka var abstrakt nok for meg (hater learn-by-example..), og jeg mener språket stort sett var ok, men repetisjon, art-of-war-greia og dårlige formuleringer begynte å irritere meg litt mot slutten.

 

Det finnes helt sikkert bøker med mer fokus på tuning av spørringer, og jeg var ikke 100% fornøyd når jeg la den fra meg da den var litt grunn, og pga språket, men bortkastet tid var det heller ikke.

Endret av Frank2004
  • 2 uker senere...
Skrevet

SQL EXPLAIN er vel rimelig plattformuavhengig, dog må man uansett ha et grunnlag for å forstå det den dytter ut av analyser.

 

En annen ting som har en tendens til å gå folk litt hus forbi i begynnelsen, er dette med indekser.

Det hjelper nemlig ikke om spørringen din er så perfekt som den kan få blitt, hvis den underliggende indekseringen ikke blir brukt / ikke eksisterer / er fragmentert til det ubrukelige.

Skrevet

Relational Database Index Design and the Optimizers kan være et godt valg.

 

En bok kan godt gi deg de generelle prinsippene bak optimalisering ved å være databasenøytral, men den vil "aldri" være utfyllende for en bestemt bok, dertil må det god kunnskap til den generelle databasemotoren. Databasemotorer har forskjellige typer indekser, og man må kunne vurdere disse opp mot hverandre. Ditto for datatyper, options i databaseserveren, query hints med mer, og ikke minst har alle databasemotorer sine små særegenheter som gjør at du kan få en overraskelse når du går fra en databaseplattform til en annen. Det er ikke få ganger jeg har hørt Oracle-folk bli overrasket over at indekser ikke blir brukt på MSSQL Server.

Skrevet

Nå begynner det å bli eindel flotte anbefalinger her, forståelse over indexer er også viktig ja.

 

Men eg tenker jo og litt på små forskjeller som f.eks.

 

SELECT description
FROM order WHERE id BETWEEN 1 AND 10

 

SELECT description
FROM order WHERE id IN (1,2,3,4,5,6,7,8,9,10)

 

eller

 

SELECT description
FROM order WHERE id IN (1,2,3,4,6,7,8,9,10)

 

SELECT description
FROM order WHERE id BETWEEN 1 AND 10
EXCEPT
SELECT description
FROM order WHERE id = 5

 

Kva bør velges og kvifor?

Skrevet

Ingen av disse spørringene er komplekse nok til å skulle ha noe vesentlig å si, men typen indeksering kan ha vesentlig betydning for hvor effektiv indeksen kan være i slike tilfeller. En Spørring med BETWEEN vil typisk gjøre godt av clustered indeks på den aktuelle kolonnen i SQL Server, for å komme med ett eksempel.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...