나는 설명을 찾을 수없는 상황이있다. 여기있다.SQL 로더, 트리거 채도?
table_a
-------------
name
last name
dept
status
notes
을 그리고이 테이블에 검증을 많이하지 삽입에 대한 트리거를 가지고 : (. 원래는 정말 큰이기 때문에 나는 가상의 정보를 사용할 것이다) 나는 테이블이
을의 말을하자 [정보] 유효성 검사의 결과에 따라 새 레코드의 상태 필드를 변경하려면 검증의 일부는 다음과 같습니다
- check for the name existing in a dictionary
- check for the last name existing in a dictionary
- check that fields (name,last name,dept) aren't already inserted in table_b
- ... and so on
것은, 내가
같은 쿼리를 통해 테이블에 삽입을 할 경우insert into table_a
(name,last_name,dept,status,notes)
values
('john','smith',1,0,'new');
는
은, 모든 검증 과정을 수행 상태 필드를 업데이트하고 테이블에 레코드를 삽입 만 173 밀리합니다. (유효성 검사 프로세스는 인덱스를 통해 모든 검색을 수행합니다)
그러나 SQLloader를 통해이 레코드를 읽으면 5000 레코드가있는 파일을 읽는다면 유효성을 검사하고 149 개의 레코드를 삽입하는 데 40 분이 걸립니다. 물론 ...)그래서 데이터를 로딩하여 (속도 검사를 위해) 데이터를로드하려고 시도했는데 10 초 이내에 모든 레코드가로드됩니다.
그래서 제 질문은 내가이 프로세스를 개선하기 위해 무엇을 할 수있다? 내 유일한 이론은 너무 빨리로드되고 트리거의 많은 인스턴스를 시작하기 때문에 데이터베이스가 포화 상태 일 수 있다는 것이지만 실제로는 알지 못합니다.
내 목표는 정보와 함께 약 60 파일을로드하고 (하지만 다른 옵션을 시도 할 의사가) 트리거의 과정을 확인하는 것입니다.
난 정말 당신이 제공 할 수있는 어떤 도움을 appreciatte 것입니다!
COMPLEMENT- ------------------------------------------ --------------------------------------
덕분에 대답, 지금은 ' 이 모든 것에 대해 읽을 것이니, 이제이 부분을 도와 줄 수 있기를 바랍니다. 제가 필요한 기능 중 일부를 설명 할 (그리고 내가 다른 것을 생각하지 못했습니다 트리거 원인을 사용)
때문에 테이블 데이터는이 (중요한) 필드와 함께 제공 :
pid name lastname birthdate dept cicle notes
데이터
칼 : 지금이
name lastname birthdate dept
처럼 제공, 트리거는 데이터에이 작업을 수행 (알고리즘을 사용하여 이름, 성 및 생년월일을 기반으로 계산 됨)
사전에서 이름을 확인하는 함수를 호출합니다. 즉, 사전에 단일 이름, 의미 사람이 존 아론 스미스 존스라는 이름을 가진다면 두 사람이 죤 아론을 분리하고 사전에 죤과 아론을 검색합니다. 즉, 외래 키를 사용하지 않은 이유입니다. [죤 아론 (john aaron) 존 앨런, 존 피어스 ..etc]) ---> 좀처럼 사전을 바꾸지 않고 키를 가지고 이것을 구현하는 방법에 대해 고민했다. 아마도 CHECK를 사용했을 것이다. 성 외래 키는 좋은 생각 일 것이다.
dept와 현재 날짜에 따라 다른 표에서 cicle을 가져옵니다. 왜냐하면 사람이 같은 부서의 표에 두 번 나타날 수 있지만 다른 기분에 나타날 수 있습니다. ---> 어떻게이 cicle 값을 얻을 수 있습니까? 올바른 검색을 수행하는보다 효율적인 방법?
그리고이 모든 유효성 검사를 완료 한 후 마지막으로, 나는 (따라서 필드 노트)을 충족하므로 트리거가이 같은 실패 검증의 모든 문자열을 연결해되지 않은 검증을 정확히 알아야합니다
을
lastname not in dictionary, cannot calculate pid (invalid date), name not in dictionary
내가 제약 사항이 충족되지 않는 경우 내가 할 수있는 모든 제약 - 실패 오류 메시지가 다른 테이블에 레코드를 삽입 것을 알고 있지만, 단 하나의 유효성 검사 나 잎, 바로 내가 오전 ? 하지만 나는 그들 모두를 검증하고 보고서를 다른 부서에 보내서 데이터를 검토하고 필요한 모든 조정을 할 수 있어야합니다.
어쨌든, 지금 상황입니다. 가능성을 모색하고 전반적인 프로세스에 대해 의견을 나눌 수 있기를 바랍니다. 시간 내 주셔서 대단히 감사합니다.
'name'과'last_name'의 경우, 트리거를 사용하는 대신 사전을 나타내는 테이블을 참조하는 외래 키 제약 조건을 고려 했습니까? 세 번째 유효성 검사를 위해서'table_a' 또는'table_b'을 의미합니까? 만약 당신이'table_a'를 의도했다면 당신은 대신 고유의 제약 조건을 고려 했습니까? 만약 당신이'table_b'을 의미했다면 당신은 고유 한 제약을 사용하여 고유성을 적용 할 수 있도록 단일 테이블을 대신 사용하는 것을 고려할 수 있습니다 - 동시에 동시 삽입/업데이트 하에서이를 올바르게 수행하기위한 트리거를 작성하는 것은 놀랍지 않습니다. 잠금을 사용해야 함). –
당신의 사전은 얼마입니까? Namex 사이트 http://www.namethesaurus.com/에서 통계를 확인하십시오. – APC