>source

I 항목을 계산하기 위해 삽입 및 삭제 후 테이블에서 트리거하는 데 사용 중입니다.

그러나 나는 그것이 그것이 비효율적으로 쿼리하는 것이라고 생각합니다.

트랜잭션이 250,000 행을 삽입하면 트리거가 켜져 있으면 75 초가 소요됩니다. 그러나 방아쇠가 아닌 경우 60 초가 소요됩니다.

일부 세션 변수가 고유 한 수표를 끄는 것을 보았을 때 ... 그런 식으로 트리거를 끄는 방법이 있습니까?

MariAdb가 어쨌든 방아쇠를 최적화하지 않는다고 생각합니다. (나는 단지 +1 작동 250,000을 반복한다는 것을 의미한다.

아래의 내 방아쇠입니다.

CREATE TRIGGER incrementTableA
AFTER INSERT ON TableA
FOR EACH ROW
    UPDATE Counts
    SET Counts.value= Counts.value + 1
    WHERE Counts.var='totalTableA';
CREATE TRIGGER decrementTotalTableA
AFTER DELETE ON TableA
FOR EACH ROW
    UPDATE Counts
    SET Counts.value= Counts.value -1
    WHERE Counts.var='totalTableA';

일반 삽입 외에 행을 업데이트 할 때 25 %의 추가 시간이 나쁘지 않습니다.

The Impaler2021-07-22 14:05:09

관련된 문제를 해결 해 보겠습니다. 250K 행이 삽입되는 원인 한 번에 모두? 우리가 그것을 속도를 높일 수 있는지 봅시다. 그런 다음 카운터를 부딪 히게 되돌아 가게하십시오.

Rick James2021-07-22 14:05:09

@ robertoc.rodriguez-hidalgo 예. 나는 프리스트 대답이 정확하다고 생각한다. 그러나 그것은 매우 복잡해 보인다 .... 나는 아이디어 (세션 또는 사용자 트리거, 어쩌면?)를 이해합니다. 그러나 이상적이지 않습니다 .... XD.

JaeIL Ryu2021-07-22 14:05:09
  • 이전 python : 사용자가 Enter 키를 누르면 입력을 취하고 싶습니다. 그렇지 않으면 다른 기능에 따라 어떻게 함수를 만들 수 있습니다.
  • 다음 javascript : 두 개의 구성 요소가 서로 연결되어 있습니다