Avatar billede harisk Nybegynder
20. september 2005 - 11:23 Der er 7 kommentarer og
1 løsning

performance issue: database kald vs. mængde returneret data?

hejsa,

jeg står og skal vælge imellem opdeling af en stor stored procedure i 5 mindre som hver især tager sig af sin del af data og "en stor een" som skal hente alt på en gang.

Det er jo den "dilemma" mellem 5 databasekald og kun een som returnerer det hele.

Hvad er det bedste tilgang, rent performance mæssigt?
Avatar billede arne_v Ekspert
20. september 2005 - 13:03 #1
1 stor vil give både mindre netværks traffik og mindre load på server
Avatar billede harisk Nybegynder
20. september 2005 - 13:08 #2
kan jeg så tage og kalde de 5 "mindre" fra en 6. procedure så jeg rent faktisk kun udfører et kald til serveren og får alt data tilbage igen? Kan jeg det, altså kalde stored procedure fra en anden stored procedure? Det vil gøre det nemmere for mig at vedligeholde procedurerne... eller er det bare ønske tænkning?
Avatar billede arne_v Ekspert
20. september 2005 - 13:10 #3
du kan sagtens kalde flere SP fra en SP

men det virker kun i praksis hvis dit programmerings sprog understøtter
at hente flere result set fra et SP kald (men det gør det sikkert)
Avatar billede harisk Nybegynder
20. september 2005 - 13:13 #4
jeg udvikler i C# (på .NET 2.0 BETA platformen), så gøre den det måske... Har nemlig ikke prøvet det før. Men du må gerne fyre et svar af... :)
Avatar billede arne_v Ekspert
20. september 2005 - 13:17 #5
svar
Avatar billede arne_v Ekspert
20. september 2005 - 13:17 #6
et C# eksempel med en SP som returnerer 2 result set:

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=Test");
        con.Open();
        SqlCommand cmd = new SqlCommand("getall", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        Console.WriteLine("lige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.NextResult();
        Console.WriteLine("ulige f1:");
        while(rdr.Read())
        {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        con.Close();
    }
}
Avatar billede arne_v Ekspert
20. september 2005 - 13:18 #7
det er

rdr.NextResult();

som gør tricket
Avatar billede harisk Nybegynder
20. september 2005 - 13:26 #8
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester