none
Performanter Filter auf Datenbank RRS feed

  • Frage

  • Hallo zusammen,

    ich würde gerne einen Filter auf IDs in einer Datenbank realisieren. Der Benutzer soll in ein Textfeld z.B. "12" eingeben, woraufhin dann alle IDs aufgelistet werden, die mit "12" beginnen. An sich ja kein Problem, das zu realisieren.

    Allerdings kann die Tabelle viele Einträge haben (auch über 1.000.000 Einträge sind schon möglich). Ich würde von daher ungern einfach mal per ADO.NET und DataAdapter alle Einträge aus der Datenbank laden, anbinden und dann den Filter darauf anwenden. Es soll ein Filter-Dialog entstehen. Hier macht es für mich dann keinen Sinn diesen Ladevorgang bei jedem Anzeigen des Dialoges anzustoßen.

    Was würdet Ihr vorschlagen, um auf großen Datenmengen zu filtern?

    Montag, 24. Januar 2011 19:32

Antworten

  • Hi,
    Denkst Du, dass das performant ist, wenn man ständig bei jeder eingegebenen Zahl das ganze SELECT-Statement absetzen muss und danach dann im DataGridView auch noch anzeigen? Das stelle ich mir momentan nicht ganz performant vor, vielleicht täusche ich mich aber auch...?

    IMHO ist das mit Sicherheit um einiges performanter als 1.000.000 Datensätze im Speicher zu halten und dann clientseitig zu suchen.

    Mit LIKE 'Abc%' (also einer Suche mit einem Wildcard am Ende) kann ggfs. auch noch ein Index verwendet werden. Hier gilt es, das für deine Zwecke zu optimieren.

    Ein DBMS ist genau für sowas da. Massendaten verwalten und durch entsprechende Abfragekriterien filtern, ...

    Miss doch einfach mal die Zeit in einem kleinen Test. Einfach das SQL Statement auf dem SQL Server direkt absetzen und dann einmal 1.000.000 Datensätze laden und dann mehrfach suchen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 24. Januar 2011 20:08
    Moderator

Alle Antworten

  • Hi,
    Allerdings kann die Tabelle viele Einträge haben (auch über 1.000.000 Einträge sind schon möglich). Ich würde von daher ungern einfach mal per ADO.NET und DataAdapter alle Einträge aus der Datenbank laden, anbinden und dann den Filter darauf anwenden. Es soll ein Filter-Dialog entstehen. Hier macht es für mich dann keinen Sinn diesen Ladevorgang bei jedem Anzeigen des Dialoges anzustoßen.

    Öhm. Du weißt aber schon, dass man das mit einer WHERE Klausel macht!?

      SELECT ... FROM <Tabelle> WHERE <Spalte> LIKE '<Suchbegriff>%'

    Damit kannst Du dann alles mögliche abfragen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 24. Januar 2011 19:51
    Moderator
  • Klar, das schon, aber das müsste dann ja bei jedem neuen Eingeben einer weiteren Zahl gemacht werden. Bei sehr vielen Datensätzen, dauert das schon etwas Zeit. Die Daten müssen dann ja auch wieder in einem DataGrid etc. angezeigt werden.

    Beim DataAdapter würde man das DataSet einmal füllen und kann die ganzen Filter-Operationen direkt auf den Daten im Speicher machen.

    Denkst Du, dass das performant ist, wenn man ständig bei jeder eingegebenen Zahl das ganze SELECT-Statement absetzen muss und danach dann im DataGridView auch noch anzeigen? Das stelle ich mir momentan nicht ganz performant vor, vielleicht täusche ich mich aber auch...?

    Montag, 24. Januar 2011 20:02
  • Hi,
    Denkst Du, dass das performant ist, wenn man ständig bei jeder eingegebenen Zahl das ganze SELECT-Statement absetzen muss und danach dann im DataGridView auch noch anzeigen? Das stelle ich mir momentan nicht ganz performant vor, vielleicht täusche ich mich aber auch...?

    IMHO ist das mit Sicherheit um einiges performanter als 1.000.000 Datensätze im Speicher zu halten und dann clientseitig zu suchen.

    Mit LIKE 'Abc%' (also einer Suche mit einem Wildcard am Ende) kann ggfs. auch noch ein Index verwendet werden. Hier gilt es, das für deine Zwecke zu optimieren.

    Ein DBMS ist genau für sowas da. Massendaten verwalten und durch entsprechende Abfragekriterien filtern, ...

    Miss doch einfach mal die Zeit in einem kleinen Test. Einfach das SQL Statement auf dem SQL Server direkt absetzen und dann einmal 1.000.000 Datensätze laden und dann mehrfach suchen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Montag, 24. Januar 2011 20:08
    Moderator