Benutzer mit den meisten Antworten
Performanter Filter auf Datenbank

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?
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- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 17. März 2011 00:00
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Mai 2011 08:29
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 -
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...?
-
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- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 17. März 2011 00:00
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Mai 2011 08:29