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

SQL-optimering:XML eller afgrænset streng

Der er nu en fjerde mulighed - tabelværdierede parametre , hvorved du faktisk kan sende en tabel med værdier ind i en sproc som en parameter og derefter bruge den, som du normalt ville bruge en tabelvariabel. Jeg ville foretrække denne fremgangsmåde frem for XML (eller CSV-parsing-tilgangen)

Jeg kan ikke citere præstationstal mellem alle de forskellige tilgange, men det er en, jeg ville prøve - jeg vil anbefale at lave nogle rigtige præstationstest på dem.

Rediger:
Lidt mere om TVP'er. For at overføre værdierne til din sproc, definerer du blot et SqlParameter (SqlDbType.Structured) - værdien af ​​denne kan indstilles til enhver IEnumerable, DataTable eller DbDataReader kilde. Så formodentlig har du allerede listen over værdier i en liste/array af en slags - du behøver ikke at gøre noget for at transformere den til XML eller CSV.

Jeg tror også, at dette gør sproc'en klarere, enklere og mere vedligeholdelig, hvilket giver en mere naturlig måde at opnå slutresultatet på. Et af hovedpunkterne er, at SQL klarer sig bedst til sætbaserede/ikke looping/ikke strengmanipulationsaktiviteter.

Det er ikke ensbetydende med, at den vil fungere godt med et stort sæt værdier, der sendes ind. Men med mindre sæt (op til ~1000) burde det være fint.



  1. Sådan bruger du MySql og Entity Framework 4.1-koden først

  2. Oprettelse af en tabel ved hjælp af eksplicit oprette tabel-sætning versus select into

  3. Detektering af relationer mellem MySQL DB-poster

  4. Begrundelse for MySQL fuldtekst stopord