AnsweredAssumed Answered

Langsame SQL-Abfrage

Question asked by file.maker@mybyte.ch on Aug 5, 2016
Latest reply on Aug 26, 2016 by file.maker@mybyte.ch

Hallo FM- und SQL-Cracks

Mit der Start-Routine will ich ein Global-Feld, das in verschiedenen Tabellen vorkommen kann, mit der ID des Benutzers versehen, um meine FM-Lösung Multi-User-fähiger zu machen. Nicht alle Tabellen müssen diese ID haben. Es klappt tipptopp, einzig die Abfrage nach dem globalen ID-Feld in den FileMaker-System-Tabellen dauert spürbar eine Ewigkeit von 9 bis 10 Sekunden. Wie kann ich die Abfrage spürbar beschleunigen?

 

Es geht darum, dass ich eine Liste von Tabellen erhalten will, in denen das Feld vorkommt. In den beiden Systemtabellen gibt es leider nur den Tabellennamen «TableName» als Schlüssel, und benötigen tu ich nur den Basistabellennamen «BaseTableName», da nur für diese Tabellen-Instanz ein «Alle Felder»-Layout existiert, das zwingend in meiner Lösung angelegt sein muss.

 

Nachfolgend die funktionierende Formel zum Ausprobieren. Das Resultat ist genau das, was ich benötige, nur dauert es halt eine Ewigkeit.

 

SetzeVar (

  [

    Feldname = "_ID_User_GLOBAL" ; // FELDNAMEN AENDERN MIT EUREM FELDNAMEN REICHT SCHON

    Start = ZeitStempel ( Hole( SystemDatum ) ; Hole( SystemUhrzeit ) ) ;

    Result = SQLAusführen ( "

      SELECT DISTINCT T.BaseTableName

      FROM   FileMaker_Tables T, FileMaker_Fields F

      WHERE  F.TableName=T.BaseTableName AND F.FieldName='" & Feldname & "'

    " ; "|" ; ¶ ) ;

    Stop = ZeitStempel ( Hole( SystemDatum ) ; Hole( SystemUhrzeit ) )

  ];

Result

& ¶ & Stop-Start // verbrauchte Zeit

)

 

Hab in der Where-Klausel auch schon andere Varianten ausprobiert. Performancemässig gibt es keinen Unterschied.

WHERE

  (

    SELECT F.TableName

    FROM FileMaker_Fields F

    WHERE

      F.TableName = T.BaseTableName AND

      F.FieldName='_ID_User_GLOBAL'

  ) = T.BaseTableName

 

Hier noch die Feld-Definitionen der beiden Systemtabellen:

FileMaker_Tables

  • TableName
  • TableID
  • BaseTableName
  • BaseFileName
  • ModCount

  FileMaker_Fields

  • TableName
  • FieldName
  • FieldType (the SQL data type, not the FileMaker data type)
  • FieldID
  • FieldClass (Normal, Summary, Calculated)
  • FieldReps
  • ModCount

Besten Dank für Eure Aufmerksamkeit!

Gruss aus Zürich

Hans

Outcomes