데이터베이스에 액세스할 때 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분 이내에 데이터 테이블을 열지만 쿼리 빌더를 사용하여 쿼리를 수정할 수 있기를 원합니다.
Database -> Query Builder를 사용하여 JMP는 다음 스크립트를 생성했습니다.이 스크립트는 Query Builder 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" ) ) )
)
)
) << ModifyOpen Database와 New SQL Query 스크립트가 다르게 작동하여 실행 시간에 불일치가 발생하는 이유는 무엇입니까?Query Builder 실행 속도를 높이거나 Query Builder UI를 Open Database 스크립트에 통합하는 방법이 있습니까?
저는 데이터베이스 작업이 처음입니다. 제가 배울 수 있도록 답장에 자세히 설명해 주시면 매우 도움이 될 것입니다.
감사해요!
브라이언
Re: 데이터베이스에 액세스할 때 Open Database()와 New SQL Query()의 차이점은 무엇입니까?안녕 브라이언,
죄송하지만 Query Builder는 *를 허용하지 않습니다.아마도 Peter의 튜닝 제안을 따르거나 Open Database 또는 Execute SQL을 고수해야 할 것 같습니다.
브라이언
Re: 데이터베이스에 액세스할 때 Open Database()와 New SQL Query()의 차이점은 무엇입니까?안녕 브라이언,
WHERE 절을 제거하고 Run Background를 사용해 보았지만 실행 시간은 여전히 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" ) ) )
) << Run Background()
New SQL Query() 스크립트와 함께 SELECT *를 사용하는 방법이 있습니까? 다음을 시도했지만 구문 오류가 발생합니다.
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()
감사해요!
브라이언
Re: 데이터베이스에 액세스할 때 Open Database()와 New SQL Query()의 차이점은 무엇입니까?WHERE 절을 사용한 보다 효율적인 쿼리를 위해 테이블에 하나 이상의 인덱스가 필요할 수 있습니다.PL/SQL Developer, Toad 등과 같은 대화형 Oracle 도구에서 쿼리를 조정하는 것이 좋습니다. EXPLAIN PLAN을 사용하여 쿼리에서 가장 비용이 많이 드는 항목을 확인하고 인덱스가 유용한 위치를 식별합니다.쿼리가 조정되면 OPEN DATABASE 또는 EXECUTE SQL을 사용하여 실행하십시오.
Re: 데이터베이스에 액세스할 때 Open Database()와 New SQL Query()의 차이점은 무엇입니까?안녕 브라이언,
귀하의 예에서 Open Database는 SELECT *를 수행하고 모든 데이터를 가져옵니다.이것은 Query Builder 스크립트에 있는 WHERE 절을 실행하는 것보다 훨씬 빠를 것입니다.또한 쿼리 빌더에서 수정을 수행하여 UI를 표시합니다.백그라운드 스레드에서 쿼리를 실행하는 대신 Run Background()를 시도할 수 있습니다.모든 데이터를 보지 않고 Query Builder 스크립트에서 WHERE 절을 제거하고 모든 데이터를 가져오는 것이 더 빠를 것이라고 생각합니다.
브라이언 코코란
JMP 개발