Einzelnen Beitrag anzeigen

Nuclear-Ping
(Gast)

n/a Beiträge
 
#1

[Advantage] Komplexere Abfrage dauert ewig

  Alt 10. Sep 2007, 08:09
Datenbank: Advantage Local Server • Version: 7.0 • Zugriff über: TQuery
Hallo,

folgende Abfrage dauert bei untenstehender Datenmenge "ewig":
SQL-Code:
  SELECT TOP 20
    Clients.ID,
    Clients.Name,
    HealingsheetsIndex.Title,
    HealingsheetsIndex.ObjectID,
    Objects.Name,
    Objects.ID,
    SendingSchedule.*
  FROM
    SendingSchedule,
    Clients,
    HealingsheetsIndex
      LEFT OUTER JOIN
        Objects ON Objects.ID = HealingsheetsIndex.ObjectID
  WHERE
    (Clients.ID=SendingSchedule.ClientID) AND
    (HealingsheetsIndex.ID=SendingSchedule.HealingsheetIndexID) AND
    ((HealingsheetsIndex.ID=SendingSchedule.HealingsheetIndexID) AND
    (HealingsheetsIndex.Active=TRUE)) AND
    (SendingSchedule.Active=TRUE)
  ORDER BY
    SendingSchedule.SendingTimestamp ASC;
Die Datenmenge ist:

SendingSchedule hat 358.270 Einträge
Clients hat 14 Einträge
HealingsheetsIndex hat 59 Einträge
Objects hat 5 Einträge

Die Datenbanken haben meiner Meinung nach alle ordentliche Indexe. Die Abfrage dauert bei mir 64sek (und bei anderen, zB den betroffenen Kunden).
Eine Abfrage á la "SELECT * FROM SendingSchedule" dauert allerdings nur ein paar Millisekunden.

Weiß jemand warum und wie man das schneller kriegt?

Die Strukturen sind wie folgt:
SQL-Code:
/* Table Type of HealingsheetsIndex.adt is ADT*/
Create Table HealingsheetsIndex(
   ID AutoInc,
   DateAdded TimeStamp,
   ClientID Integer,
   ObjectID Integer,
   Title Char( 64 ),
   FirstSending TimeStamp,
   LastSending TimeStamp,
   LastSent TimeStamp,
   Frequency Double,
   Duration Double,
   SendingType Short,
   Nightrest Logical,
   NightrestFrom TimeStamp,
   NightrestTo TimeStamp,
   VibrationMs Integer,
   Active Logical,
   FocusType Short,
   FocusText Char( 128 ),
   Flags Integer );

Create Index "CLIENTID" on HealingsheetsIndex( CLIENTID );
Create Unique Index "ID" on HealingsheetsIndex( ID );

/* Table Type of SendingSchedule.adt is ADT*/
Create Table SendingSchedule(
   ID AutoInc,
   HealingsheetIndexID Integer,
   ClientID Integer,
   Duration Integer,
   Frequency Integer,
   SendingTimestamp TimeStamp,
   EndingTimestamp TimeStamp,
   SendingType Short,
   Active Logical );

Create Index "HEALINGSHEETINDEXID" on SendingSchedule( HEALINGSHEETINDEXID );
Create Index "CLIENTID" on SendingSchedule( CLIENTID );
Create Unique Index "ID" on SendingSchedule( ID );

/* Table Type of Clients.adt is ADT*/
Create Table Clients(
   ID AutoInc,
   Title Char( 32 ),
   Name Char( 64 ),
   Address Memo,
   UseBirthData Logical,
   BirthDate Date,
   BirthTime Time,
   BirthPlace Char( 32 ),
   BirthCountry Char( 32 ),
   Gender Integer,
   UseManualGeoData Logical,
   Longitude Double,
   Latitude Double,
   Zone Time,
   DST Time,
   Image Blob,
   IsActive Short );

Create Unique Index "ID" on Clients( ID );

/* Table Type of Objects.adt is ADT*/
Create Table Objects(
   Id AutoInc,
   ClientId Integer,
   Title Char( 32 ),
   Name Char( 64 ),
   Address Memo,
   HasPicture Logical,
   Picture Blob,
   Notes Memo );
  Mit Zitat antworten Zitat