sql >> Databasteknik >  >> RDS >> Sqlserver

Varför orsakar denna (icke-korrelerade) underfråga sådana problem?

Det har varit min erfarenhet att ju mer komplexa dina frågor blir, desto mindre kan SQL-optimeraren skapa skickliga planer. Här har du 16 anslutningar, några eller de flesta är yttre kopplingar, du har minst en underfråga... släng in tillräckligt många index, kardinaliteter, vyer, yttre gäller, och vem vet vad mer och ingen, inte ens Microsoft ingenjörer*, kan lista ut rutiner som enhetligt och regelbundet genererar de mest optimala planerna.

Det du har beskrivit har jag upplevt många gånger -- ändra en enkel sak i en rörig fråga och allt är en storleksordning snabbare (eller gnisslar tänder, långsammare). Jag har ingen metod för att avgöra när komplex är för komplex, det är mer en känsla än något annat. Min allmänna tumregel är att om det ser för långt eller för komplext ut, förenkla där du kan – som ditt förvalda enstaka kapslade värde, eller bryta ut en del av frågan än vad som alltid kommer att göra. kör snabbt med en liten resultatuppsättning och kör den först och lagra resultaten i en temporär tabell.

( * Observera att detta är mild sarcsam)



  1. EF Core `uppdateringsdatabas` på MySql misslyckas med `__EFMigrationsHistory' existerar inte`

  2. Android SQLite Databas Unit Testing

  3. Hur man konverterar MySQL-stil frågetecken `?` bundna parametrar till Postgres-stil `$1` bundna parameter

  4. NCHR() Funktion i Oracle