MS Access select Problem?

...komplette Frage anzeigen

2 Antworten

Ich vermute mal, dass die Tabelle ksd1 sehr groß ist und auf den Spalten, die abgefragt werden, kein Index drauf ist. Wenn nur nach der Kunden-Nr gesucht wird, geht das vermutlich deshalb so schnell, weil ein Index vorhanden ist oder gar diese Spalte der Primärschlüssel ist. Die Spalte berichte.was hat bestimmt keinen Index. Eine Auswahl nach Feldern ohne Index ist nur bei kleinen Datenmengen praktikabel.

Bei Abfragen muss man ein Gefühl für die Laufzeit entwickeln. Es ist nicht schwierig, Abfragen auf einfache Weise so zu verknüpfen, dass die Datenbank tagelang damit beschäftigt ist. Ob mit JOIN oder mit WHERE verknüpft wird, ist hierbei ohne Bedeutung.

Grundsätzlich ist auf Spalten, auf die häufig abgefragt wird oder Laufzeitprobleme auftreten, ein Index nötig.

Ich weiß nicht, wie Du den LIKE verwendest. Mit Sternchen als Begrenzungszeichen ist dieser falsch, muss % sein. Wenn vorne auch begrenzt wird, kann die Datenbank auch einen vorhandenen Index allenfalls nur eingeschränkt benutzen. Das ist so, wie das Suchen im Telefonbuch nur nach dem Vornamen oder der Tel-Nr.

Warum joinst du nicht berichte mit ksd1 über die Kundennummer?



select 
        ksd1.Name1 
from
        ksd1
        inner join berichte on berichte.kdnr=ksd1.Kundennummer
where
        berichte.was='test'

(ungetestet)

Hallo.

Mit join wirds nicht gehen, es geht um einen anderen select, ich habe das testweise nur so gemacht um zu sehen wo das problem ist.

Der eigentliche select ist:

select * from ksd1 where ksd1.Bericht like '*Heute geschlossen*' or Kundennummer in (select distinct berichte.kdnr from berichte where berichte.was like '*Heute geschlossen*')

0

Was möchtest Du wissen?