存取資料庫時Open Database()和New SQL Query()有什麼不同?你好,
我正在嘗試從 Oracle 資料庫中獲取視圖。資料庫名稱為 ACTPROD.WORLD,架構為 ABASE,表為 RPT_H25_3MONTHS_VIEW
使用資料庫 -> 開啟表,JMP 建立了以下腳本:
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\!""
)
該腳本在 5 分鐘內開啟一個資料表,但我們希望能夠使用查詢產生器修改查詢。
使用資料庫 -> 查詢產生器,JMP 建立了以下腳本。該腳本僅載入查詢產生器 UI 就需要超過 3 小時。
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" ) ) )
)
)
) << Modify開放資料庫和新 SQL 查詢腳本執行哪些不同操作會導致執行時間出現如此差異?有沒有辦法加快查詢產生器的執行速度或將查詢產生器 UI 合併到開放資料庫腳本中?
我對使用資料庫非常陌生,如果您能在回覆中詳細說明以便我學習,那將非常有幫助。
謝謝!
布萊恩
回覆:存取資料庫時Open Database()和New SQL Query()有什麼不同?嗨布萊恩,
抱歉,查詢產生器不接受 *.我認為您可能需要遵循 Peter 的調整建議,或者堅持使用“打開資料庫”或“執行 SQL”。
布萊恩
回覆:存取資料庫時Open Database()和New SQL Query()有什麼不同?嗨布萊恩,
我嘗試刪除 WHERE 子句並使用 Run Background,但執行時間仍然是 3+hrs
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()
有沒有辦法將 SELECT * 與 New SQL Query() 腳本一起使用我嘗試了以下操作,但出現語法錯誤。
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()
謝謝!
布萊恩
回覆:存取資料庫時Open Database()和New SQL Query()有什麼不同?您可能需要在表上建立一個或多個索引,以便使用 WHERE 子句進行更有效率的查詢。我建議在互動式 Oracle 工具(如 PL/SQL Developer、Toad 等)中調整您的查詢。使用 EXPLAIN PLAN 來查看查詢中成本最高的部分,並確定索引在哪些方面會有所幫助。調整查詢後,使用 OPEN DATABASE 或 EXECUTE SQL 來執行它。
回覆:存取資料庫時Open Database()和New SQL Query()有什麼不同?嗨布萊恩,
在您的範例中,開放資料庫正在執行 SELECT * 並取得所有資料。這比執行查詢產生器腳本中的 WHERE 子句要快得多。另外,您正在查詢產生器上進行修改以顯示 UI。您可能想嘗試在那裡執行 Run Background(),而不是在背景執行緒上執行查詢。如果沒有看到所有數據,我認為刪除查詢產生器腳本上的 WHERE 子句並獲取所有數據可能會更快。
布萊恩·科科倫
JMP開發