sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor forårsager denne (ikke-korrelerede) underforespørgsel sådanne problemer?

Det har været min erfaring, at jo mere komplekse dine forespørgsler bliver, jo mindre er SQL-optimeringsværktøjet i stand til at lave behændige planer. Her har du 16 joins, nogle eller de fleste er outer joins, du har mindst én underforespørgsel... smid nok indekser, kardinaliteter, views, outer gælder, og hvem ved hvad ellers og ingen, ikke engang Microsoft ingeniører*, kan finde ud af rutiner, der ensartet og regelmæssigt vil generere de mest optimale planer.

Det, du har beskrevet, har jeg oplevet adskillige gange -- skift en simpel ting i en rodet forespørgsel, og alt er en størrelsesorden hurtigere (eller, gnider tænder, langsommere). Jeg har ingen metode til at afgøre, hvornår komplekst er for komplekst, det er mere en følelse end noget andet. Min generelle tommelfingerregel er, at hvis det ser for langt eller for komplekst ud, skal du forenkle, hvor du kan – f.eks. din forudvalgte enkelt indlejrede værdi, eller udskille en del af forespørgslen, end det altid vil. løb hurtigt med et lille resultatsæt, og kør det først og gem resultaterne i en midlertidig tabel.

( * Bemærk venligst, at dette er mild sarcsam)



  1. hvordan kan jeg bruge forbindelsesstreng sammen med jdbc url

  2. Python + MySQLdb eksekvering

  3. To-do liste applikation ved hjælp af PHP og MySQL database

  4. Er det en dårlig idé at bruge Dev/Test RDS for dit projekt frem for Production RDS?