2014-06-06 4 views
1

다음과 같은 요구 사항이 있습니다. 나는 4 개의 MySQL 데이터베이스와 사용자가이 데이터베이스 각각의 테이블에있는 레코드 수를 계산해야하는 응용 프로그램을 가지고있다. 문제는 매분마다 카운트가 변경 될 수 있다는 것입니다. 따라서 사용자가 특정 UI 영역에 마우스를 올려 놓을 때마다이 모든 데이터베이스에 대한 호출이 있어야하고 개수가 필요합니다. 이 테이블은 수백만 개의 레코드를 포함하고 있으며 마우스를 올릴 때마다 dB 호출이 이러한 모든 데이터베이스에 전달되므로 최상의 접근 방식이라고 생각하지 않습니다.MySql 트리거 및 성능

트리거는 내가 발견 한 한 가지 방법입니다. 데이터베이스에서 데이터를 가져 오는 대신이 테이블에 삽입/업데이트/삭제가 발생할 때마다 트리거가 실행되고 다른 테이블 (이 테이블의 수만 포함)에서 카운트가 증가/감소 할 때와 같은 기분이 듭니다. . 그러나 나는 데이터베이스 성능에 영향을 미칠 것 같은 트리거를 읽었지만, 또한 일부 상황 트리거를 읽는 유일한 해결책입니다.

내 상황을 안내 해주시기 바랍니다. 트리거가 해결책입니까? 데이터베이스 성능에 영향을 미친다면 필 요할 필요가 없습니다. 이 문제에 대한 다른 더 나은 접근 방법이 있습니까? 내가 이해 무엇

감사

답변

0

당신이 그들 각각 4 데이터베이스와 해당 테이블의 번호를 가지고 사용자가 응용 프로그램에서 특정 지역을 가리킬 때 사용자가 해당 테이블의 행 수를 볼 수 있습니다. database.Triggers에서 각 테이블의 행 수를 반환하려면 count (*)를 사용하는 것이 좋습니다. update, delete 또는 insert와 같은 특정 이벤트가 데이터베이스에서 발생하는 경우 무언가를 수행하는 데 사용됩니다. 좋은 생각이 아닙니다. 호버링과 같은 사용자 상호 작용에 반응하는 트리거를 호출 할 수 있습니다. 어떤 언어로 프런트 엔드를 설계하고 있는지 알려주면보다 구체적으로 설명 할 수 있습니다.

예 :

SELECT COUNT(*) FROM tablename where condition 

또는

SELECT SQL_CALC_FOUND_ROWS * FROM tablename 
    WHERE condition 
    LIMIT 5; 

SELECT FOUND_ROWS(); 

두 번째는 당신이 결과를 제한하지만 여전히 행의 총 수를 반환이 도움이 found.Hope하고자 할 때 사용된다.

+0

답장을 보내 주셔서 감사합니다. 당신이 준 해결책은 간단합니다. 그러나 나는 성능에 대해 우려하고 있으며, 각 마우스가 끝났다는 것을 묻고 있습니다.이 카운트 (*) 쿼리를 내 데이터베이스에 쓰는 것은 좋은 옵션이 아닙니다. 이 데이터베이스는 방대한 양의 레코드를 포함하고 있으며 다른 응용 프로그램에서도 사용됩니다. 내 접근 방식은 그 테이블에 트리거를 작성하고 나는 다른 테이블 (내 응용 프로그램에 의해 사용되는 테이블)에 카운트를 유지합니다. 그래서 나는 쉽게 카운트를 가져올 수 있습니다. 하지만 내가 쓰는 것은 트리거를 쓰는 것이 좋은 선택인지 아닌지입니다. – Dev