Was ist der Unterschied zwischen Open Database() und New SQL Query() beim Zugriff auf Datenbanken?Hallo,
Ich versuche, eine Ansicht aus einer Oracle-Datenbank abzurufen.Der Datenbankname ist ACTPROD.WORLD, das Schema ist ABASE und die Tabelle ist RPT_H25_3MONTHS_VIEW
Mit Datenbank -> Tabelle öffnen erstellte JMP das folgende Skript:
Open Database(
"DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;",
"SELECT * FROM \!"ABASE\!".\!"RPT_H25_3MONTHS_VIEW\!""
)
Dieses Skript öffnet eine Datentabelle in <5 Minuten, aber wir möchten die Abfrage mit dem Abfrage-Builder ändern können.
Mit Database -> Query Builder hat JMP das folgende Skript erstellt.Dieses Skript benötigt mehr als 3 Stunden, um die Query Builder-Benutzeroberfläche zu laden.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select(
Column( "TEST_ID", "t1" ),
Column( "OBJECT", "t1" ),
Column( "BATCH", "t1" ),
Column( "WELL", "t1" ),
Column( "PLATE", "t1" ),
Column( "SEQUENCE", "t1" ),
Column( "%C(%)", "t1" ),
Column( "RATE", "t1" ),
Column( "RATE_UNIT", "t1" ),
Column( "REPLICATE", "t1" ),
Column( "SOIL", "t1" ),
Column( "SPECIES_ABBR", "t1" ),
Column(
"CREATED_DATE",
"t1",
Numeric Format( "m/d/y h:m:s", "0", "NO", "" )
)
),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) ),
Where(
In List(
Column( "TEST_ID", "t1" ),
{"H2.5-20190618", "H2.5-20190723", "H2.5-20190806"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
) & Is Not Null(
Column( "%C(%)", "t1" ),
UI( NullTest( Base( "Continuous" ) ) )
)
)
) << ModifyWas machen die Skripte „Open Database“ und „New SQL Query“ anders, was zu einer solchen Diskrepanz in der Ausführungszeit führt?Gibt es eine Möglichkeit, die Ausführung von Query Builder zu beschleunigen oder die Query Builder-Benutzeroberfläche in das Open Database-Skript zu integrieren?
Ich bin wirklich neu in der Arbeit mit Datenbanken. Es wäre sehr hilfreich, wenn Sie in Ihren Antworten detailliert darauf eingehen könnten, damit ich lernen kann.
Danke!
Brian
Betreff: Was ist der Unterschied zwischen Open Database() und New SQL Query() beim Zugriff auf Datenbanken?Hallo Brian,
Es tut mir leid, aber Query Builder akzeptiert keine *.Ich denke, Sie müssen wahrscheinlich Peters Optimierungsvorschlag folgen oder bei Open Database oder Execute SQL bleiben.
Brian
Betreff: Was ist der Unterschied zwischen Open Database() und New SQL Query() beim Zugriff auf Datenbanken?Hallo Brian,
Ich habe versucht, die WHERE-Klausel zu entfernen und Run Background zu verwenden, aber die Ausführungszeit beträgt immer noch mehr als 3 Stunden
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select(
Column( "TEST_ID", "t1" ),
Column( "OBJECT", "t1" ),
Column( "BATCH", "t1" ),
Column( "WELL", "t1" ),
Column( "PLATE", "t1" ),
Column( "SEQUENCE", "t1" ),
Column( "%C(%)", "t1" ),
Column( "RATE", "t1" ),
Column( "RATE_UNIT", "t1" ),
Column( "REPLICATE", "t1" ),
Column( "SOIL", "t1" ),
Column( "SPECIES_ABBR", "t1" ),
Column( "CREATED_DATE", "t1", Numeric Format( "m/d/y h:m:s", "0", "NO", "" ) )
),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) )
) << Run Background()
Gibt es eine Möglichkeit, SELECT * mit dem New SQL Query()-Skript zu verwenden? Ich habe Folgendes versucht, erhalte jedoch einen Syntaxfehler.
New SQL Query(
Version( 130 ),
Connection(
"ODBC:DSN=ACTPROD.WORLD;UID=;PWD=;DBQ=ACTPROD.WORLD;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;MLD=0;ODA=F;STE=F;TSZ=8192;AST=FLOAT;"
),
QueryName( "RPT_H25_3MONTHS_VIEW" ),
Select("*"),
From( Table( "RPT_H25_3MONTHS_VIEW", Schema( "ABASE" ), Alias( "t1" ) ) )
) << Run Background()
Danke!
Brian
Betreff: Was ist der Unterschied zwischen Open Database() und New SQL Query() beim Zugriff auf Datenbanken?Für eine effizientere Abfrage mit einer WHERE-Klausel benötigen Sie möglicherweise einen oder mehrere Indizes für Ihre Tabelle.Ich würde vorschlagen, Ihre Abfrage in einem interaktiven Oracle-Tool wie PL/SQL Developer, Toad usw. zu optimieren. Verwenden Sie EXPLAIN PLAN, um zu sehen, was Sie in Ihrer Abfrage am meisten kostet, und um herauszufinden, wo ein Index hilfreich wäre.Sobald Ihre Abfrage optimiert ist, verwenden Sie entweder OPEN DATABASE oder EXECUTE SQL, um sie auszuführen.
Betreff: Was ist der Unterschied zwischen Open Database() und New SQL Query() beim Zugriff auf Datenbanken?Hallo Brian,
In Ihrem Beispiel führt die offene Datenbank ein SELECT * aus und greift einfach auf alle Daten zu.Dies geht viel schneller als die Ausführung der WHERE-Klausel im Query Builder-Skript.Außerdem nehmen Sie eine Änderung am Abfrage-Generator vor, um die Benutzeroberfläche aufzurufen.Möglicherweise möchten Sie dort stattdessen Run Background() ausprobieren, um die Abfrage in einem Hintergrundthread auszuführen.Ohne alle Daten zu sehen, würde es meiner Meinung nach wahrscheinlich schneller gehen, die WHERE-Klausel im Query Builder-Skript zu entfernen und alle Daten abzurufen.
Brian Corcoran
JMP-Entwicklung