Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Hilfe bei unperformanter Datenbankabfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von medi0815, 19 Juni 2013.

  1. medi0815

    medi0815 Neuer Benutzer

    Hallo,

    Erst einmal: Ich habe nicht wirklich viel Ahnung von SQL. Leider hat sich mitlerweile heraus gestellt, dass entweder mein query grottig zu sein scheint oder mein Datenbankmodell. Denn diese Abfrage hier dauert ca. 35-40 Sekunden bei vielleicht 50k Einträgen, was ja irgendwie nicht sein kann.

    Hier das query:
    Code:
    SELECT
    myDB.idDocBasic as idDocBasic, myDB.number as number,
    myDB.title as title, myDB.accessRights as accessRights,
    myP.number as projectNumber, myDT.description as docType,
    myDC.description as docClass, myR.idRevision as idRevision,
    myR.source as source, myU.name as insertedBy, myR.dateCreation as creationDate,
    myR.creator as creator, myR.isExternalDoc as isExternalDoc,
    myR.externalDocNo as externalDocNumber, myR.idRefIntern as internalDocNumber,
    myR.idBill as idBill, myR.attachmentKeywords as attKeywords, myR.receiver as receiver
    FROM  myDocumentBasics as myDB
    INNER JOIN myProjects as myP ON myDB.idProject = myP.idProject
    INNER JOIN myDocumentTypes as myDT ON myDB.idDocType = myDT.idDocumentType
    INNER JOIN myDocumentClasses as myDC ON myDB.idDocClass = myDC.idDocumentClass
    INNER JOIN myRevisions as myR ON myDB.idDocBasic = myR.idDocBasic
    INNER JOIN myUser as myU ON myR.idInsertedBy = myU.idUser
    WHERE myR.isLatestRevision = 1 AND myDB.accessRights <= 1
    ORDER BY myDB.idDocBasic DESC, myR.idRevision DESC
    Wie steht es mit der Abfrage. Ist die prinzipiell in Ordnung und ich müsste vielleicht nach den Indices schauen oder ist die Abfrage ansich schon falsch aufgebaut?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Frag doch mal EXPLAIN ;-)
     
  3. ukulele

    ukulele Datenbank-Guru

    Eigentlich ist der INNER JOIN ja recht anspruchslos aber es sind natürlich viele davon. Bezieht sich die 50k Einträge auf das Ergebnis des Selects oder auf alle Zeilen in allen Tabellen? Ich die Nebentabellen sollten alle einen Index auf die ID haben.
     
  4. medi0815

    medi0815 Neuer Benutzer

    Blöde frage aber: Wasn das? ^^
    Ich hab jetzt mal so ne Analyse gestartet, werde aber aus den Ergebnissen nicht so recht schlau. Der Meckert mir irgend welche Indices an, die fehlen würden obwohl jede meiner Tabelle nen Index auf die ID Spalte verpasst bekommen hat.
     
  5. medi0815

    medi0815 Neuer Benutzer

    Ok ich hab übertrieben. Hab grad mal nachgeschaut. Sind in insgesamt vielleicht 20k Einträge, davon in der größten Tabelle rund 10k. Als Ergebnisstabelle erhalten ich ca. 6700 Einträge.
    Index haben wie gesagt alle IdSpalten der Tabellen. Kann man da was falsch einstellen?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    http://www.datenbankforum.com/threads/erklärt-explain.913/

    Als erster Anlaufpunkt. ich bin mir recht sicher, daß auch M$SQL ein EXPLAIN - Befehl kennt.

    Andreas
     
  7. ukulele

    ukulele Datenbank-Guru

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden