.: News - Downloads - Hilfe Forum - Windows FAQ - Kontakt - Impressum / Datenschutz :.
  Navigation

    Startseite
    Newscenter
    Downloads
    Screenshots
    Forum
    Online Shop
    Spielhalle
    Bilder Upload
    Mitglieder Map

  FAQ Datenbank

    FAQ, Tipps, Hilfe
    CMD (DOS) Befehle
    Windows 2000
    Windows Vista
    Windows XP
    Server 2003
    Microsoft Office
    Security Bulletins
    Service Packs

  Update Packs

    Windows 2000
    Windows XP
    Server 2003

  Service

    Windows XP Slipper
    Slipstream CD
    MS Security Tools

  RSS Feed  

    Alle News
    Treiber News
    Software News
    Hardware News
    Microsoft News
    Alle Windows FAQ
    Windows 2000 FAQ
    Windows XP FAQ
    Windows Vista FAQ
    Update Packs
    Screenshots
    Downloads

  Surf-Tipp

    Kostenlose Online-Kurse zu MS Office, OpenOffice und Internet-Technik

Keine Kompromisse im Kampf gegen Kinderpornografie


Archiv Screenshots
Archiv FAQ
Archiv Community News
Archiv Spiele News
Archiv Konsolen News
Archiv Allgemeine News
Archiv Microsoft News
Archiv Hardware News
Archiv Treiber News
Archiv Software News
Zurück   Winhelpline Forum > Sonstige Themen > Programmierung und Skripte
Passwort vergessen?

Programmierung und Skripte Alles zum Thema AJAX, HTML, CSS, XML, XSL, JavaScript, SQL, PHP, Perl & CGI, JAVA, Apache, u.v.m.

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 14.08.2003, 07:12   #1
Elminster
Inspekteur
 
Benutzerbild von Elminster
 
Registriert seit: 30.03.2001
Ort: Hamburg
Alter: 28
Beiträge: 5.414



SQL-Syntax "verfeinern" - wer mal gucken will

Hmm hmm hmm...

Kurz Forum es geht. Es gibt eine (Access)-Datenbank mit Hörbüchern/Hörspielen, die der User per Web einsehen und nach mehreren Kriterien (Genre, Typ...) sortieren kann.

Zudem kann er einen Titel als bereits gehört makieren oder in seine Favoriten (also nicht die IE-Fav's ) packen.

Als kleine "Stöberergänung" kann er dann bei der Suche auch als Kriterium angeben, dass er keine Favoriten bzw. bereits gehörten angezeigt bekommt.

Also ich habe folgende SQL-Abfrage:
Code:
SELECT autor_vorname,autor_nachname,Titel, Genre, Sprache, Lesung, gekuertzt, id, Date_Added, Auf_Platte FROM audiobooks WHERE ID>0 AND id NOT IN (SELECT AbHeardID FROM Audiobooks_User_Heard WHERE userID=13) AND id NOT IN (SELECT RememberID FROM Audiobooks_User_Remember WHERE userID=13) ORDER BY Autor_Nachname, Autor_Vorname, Sprache, Titel

Das ist jetzt eine Abfrage ohne weitere Eingrenzungen ausser, dass keine Fav's/Gehörten angezeigt werden sollen (der rot makierte Teil).

Das Problem ist, dass er bei 1900 Titeln etwa 6-7 Sekunden braucht um diese Abfrage durchzuführen (Prozessorlast beim P3 600 auf 100%), d.h. er braucht für ca. 250 Datensätze eine Sekunde. Find ich etwas krass!

Kann man jetzt die SQL-Abfrage sinnvoller stellen um nur die Titel in der Tabelle "Audiobooks" die keine Entsprechung bei 'UserID' und 'TitelID' in den Tabellen "Audiobooks_User_Heard" (als gehört eingetragen) und "Audiobooks_User_Remember" (Favoriten) haben?

Wenn sich jemand schon bishier durchgekämpft hat schonmal danke


Elminster's Signatur
Wenn Baumeister Gebäude bauten, so wie Programmierer Programme machen, dann würde der erste Specht, der vorbeikäme, die Zivilisation zerstören...
Elminster ist offline   Mit Zitat antworten
Alt 14.08.2003, 08:35   #2
HeikoBerlin
Inspekteur
 
Benutzerbild von HeikoBerlin
 
Registriert seit: 08.08.2003
Ort: Berlin
Alter: 40
Beiträge: 8.132



Standard

Also comments zur Prozessorlast sind reine Spekulation

Falls Du da alle Felder der Tabelle audiobooks ausliest,
wäre vermutlich ein * sinnvoller (probiere, messe Zeit)

Ich vermute das deine Abfrage schneller laufen würde,
wenn Du zuerst die ausgeschlossenen ID's ermittelst
und dann die Felder von audiobooks ausliest.

Oder Du liest 'Select * FROM audiobooks' ein und
blendest nur die Anzeige der max. 2 Datensätze aus
(welche vorher mittels Abfrage in eine Variable kommen
und dann mittels if Bedingung nicht angezeigt werden)

Nun wiederhole ich mich hier erstmals:
Im Zweifel hilft ein vollständiges Beispiel

HeikoBerlin ist offline   Mit Zitat antworten
Alt 14.08.2003, 09:35   #3
Elminster
Inspekteur
 
Benutzerbild von Elminster
 
Registriert seit: 30.03.2001
Ort: Hamburg
Alter: 28
Beiträge: 5.414

  Themenstarter


Standard

Zitat:
Original geschrieben von HeikoBerlin
Also comments zur Prozessorlast sind reine Spekulation

Naja, die dllhost.exe geht genau bei der Abfrage für x Sekunden auf 100%...

Zitat:
Falls Du da alle Felder der Tabelle audiobooks ausliest,
wäre vermutlich ein * sinnvoller (probiere, messe Zeit)
Nein tu ich nicht, aber im Grunde ist es trotzdem sicher nicht falsch insofern nur wenige Felder nicht genutzt werden

Zitat:
Ich vermute das deine Abfrage schneller laufen würde,
wenn Du zuerst die ausgeschlossenen ID's ermittelst
und dann die Felder von audiobooks ausliest.
Das versteh ich nicht ganz. Ermitteln kann ich die zwar, aber wenn ich hundert ausgeschlossene ID's habe - wie soll ich die dann filtern ohne eine SQL-Abfrage mit 100 "AND id <>'xy'" (die zudem nicht genommen wird, weil zu komplex)?

Zitat:
Oder Du liest 'Select * FROM audiobooks' ein und
blendest nur die Anzeige der max. 2 Datensätze aus
(welche vorher mittels Abfrage in eine Variable kommen
und dann mittels if Bedingung nicht angezeigt werden)
Naja, sind schon mehr als zwei und da ergibt sich das selbe Problem wie oben

Zitat:
Nun wiederhole ich mich hier erstmals:
Im Zweifel hilft ein vollständiges Beispiel
Hmm, also ich häng mal die zwei ASP-Seiten (Formular+Suche) an und das Layout der DB, aber ob das hilft?

Danke jedenfalls für die Antwort

Externer Link http://www.logikwoelkchen.de/tmp/default.txt
Externer Link http://www.logikwoelkchen.de/tmp/searchdb.txt
Externer Link Audiobook-DB Layout


Elminster's Signatur
Wenn Baumeister Gebäude bauten, so wie Programmierer Programme machen, dann würde der erste Specht, der vorbeikäme, die Zivilisation zerstören...
Elminster ist offline   Mit Zitat antworten
Alt 14.08.2003, 10:23   #4
Harvey
Hausmeister
 
Benutzerbild von Harvey
 
Registriert seit: 27.07.2000
Ort: Planet Erde, Milchstraße
Alter: 44
Beiträge: 9.939


Standard

Hai,

nur mal so generell in's Blaue geraten:
in audiobooks sollte id Teil des Primärschlüssels sein
in Audiobooks_User_Heard sollten AbHeardID und userid zusammen den Primäschlüssel bilden.
in Audiobooks_User_Remember sollten RememberID und userid zusammen den Primäschlüssel bilden.

in audiobooks könnte ein gemeinsamer Index auf Autor_Nachname, Autor_Vorname, Sprache und Titel Sinn machen.

Eventuell lässt sich noch durch eine Union-Abfrage etwas beschleunigen (es kann aber auch langsamer werden, jenachdem ob intern eine temporäre Tabelle auf Platte angelegt wird).
Code:
SELECT autor_vorname,autor_nachname,Titel, Genre, Sprache, Lesung, gekuertzt, id, Date_Added, Auf_Platte FROM audiobooks WHERE ID>0 AND id NOT IN (SELECT AbHeardID FROM Audiobooks_User_Heard WHERE userID=13 UNION SELECT RememberID FROM Audiobooks_User_Remember WHERE userID=13) ORDER BY Autor_Nachname, Autor_Vorname, Sprache, Titel

Was auch klappen könnte ist folgendes etwas unansehnliche Konstrukt (kann allerdings wegen dem OR auch schlimmer werden):
Code:
SELECT audiobooks.autor_vorname, audiobooks.autor_nachname, audiobooks.Titel, audiobooks.Genre, audiobooks.Sprache, audiobooks.Lesung, audiobooks.gekuertzt, audiobooks.id, audiobooks.Date_Added, audiobooks.Auf_Platte FROM audiobooks left join Audiobooks_User_Heard on audiobooks.id=Audiobooks_User_Heard.AbHeardID left join Audiobooks_User_Remember on audiobooks.id=Audiobooks_User_Remember.RememberID where Audiobooks_User_Heard.AbHeardID is NULL OR Audiobooks_User_Remember.RememberID is NULL
Erklärung: merkwürdig sieht zwar aus, dass id = AbHeardID sein soll und AbHeardID = NULL, aber bei einem left join stimmt das erste = nicht wirklich, deshalb wird alles rausgefiltert, wo AbHeardID nicht drin ist.

Viel Spass beim Experimentieren, ich habe den Kram nicht getestet.


Harvey's Signatur Gruß Harvey
Who on earth is general failure? And why has he access to my hard disk?
Bitte besucht unsere Sponsoren. Wir sammeln für eine Suite in der Karibik
Harvey ist offline   Mit Zitat antworten
Alt 14.08.2003, 12:14   #5
GreatValue
No Life
 
Registriert seit: 28.05.2002
Ort: München
Beiträge: 575



Standard

Muss dass nicht ein left outer join sein? Sonst kriegt er doch genau die bereits gehörten/gemerkten Bücher

Aber ansonsten könnten das vielleicht wirklich schneller sein, als das "not in" ein Versuch ist es sicher wert.

GreatValue ist offline   Mit Zitat antworten
Alt 14.08.2003, 13:46   #6
Elminster
Inspekteur
 
Benutzerbild von Elminster
 
Registriert seit: 30.03.2001
Ort: Hamburg
Alter: 28
Beiträge: 5.414

  Themenstarter


Standard

Danke für die Tips. Ich werd es mal alles ausprobieren, wobei ersters z.B. folgenden Fehler erzeugt:
Zitat:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] This operation is not allowed in subqueries.

Vielleicht ist es aber auch "by design" lahm


Elminster's Signatur
Wenn Baumeister Gebäude bauten, so wie Programmierer Programme machen, dann würde der erste Specht, der vorbeikäme, die Zivilisation zerstören...
Elminster ist offline   Mit Zitat antworten
Antwort



Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
ungültiger Syntax bei Internetseiten mit passwortabfrage nach SP2 ? lelleck Service Pack Windows XP 5 11.08.2004 21:46
netsh syntax kaffeekuh Netzwerk Windows XP 3 28.08.2003 11:28
syntax fehler im ie blade2603 Allgemein Windows XP 3 15.11.2002 19:07
Wer kennt Text editor mit Syntax Highlighting BilboBobsin Software Windows 2000 2 15.08.2001 16:29
Enviromental Variables angeben - Syntax? Elminster Allgemein Windows 2000 8 05.08.2001 06:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.


Powered by vBulletin Version 3.5.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2000 - 2006, WinHelpline.info
  Werbung

  Moderatoren

   Schach
   Seefahrt
   Lotte Berk
   Netzwerkservice
   Football
   Webdesign

Partnerlinks:  3DCenter.org |  3DChips.net |  Planet 3DNow! |  3DChip.de |  Netzwerktotal |  Wintotal.de |  Elektrikforum.de |  Computerwissen.de |  Prad.de |  Winsoftware.de |  netzwelt.de |  WinFAQ.de