검색어에 대해 similar 및 close-match 개의 질문을 찾을 수있었습니다. 그러나 같은 일을하는 더 좋은 방법이 있는지 알고 싶습니다.조건부 개수 및 그룹화 기준 (실시간 데이터 포함)
웹 서비스 끝점에 대한 호출로 채워지는 데이터베이스 테이블이 있습니다. 끝점은 특정 이벤트가 발생하고이 테이블에 새 레코드가 삽입 될 때 호출됩니다. 이벤트는 실시간으로 발생하며 설정된 빈도 또는 이벤트 발생 패턴이 없습니다. 내가 같은 테이블에서 데이터를 가져 오는하고
CREATE TABLE MyTbl(id int, type nvarchar(10), timestamp datetime, category nvarchar(50));
: 보고서에 대한 database schema
, sample data
및 select-query
에 대해
SELECT category,
COUNT(CASE WHEN type = 'sent' THEN 1 END) sent,
COUNT(CASE WHEN type = 'received' THEN 1 END) received,
COUNT(CASE WHEN type = 'blocked' THEN 1 END) blocked,
COUNT(CASE WHEN type = 'opened' THEN 1 END) opened
FROM MyTbl
WHERE timestamp >= '2013-01-01 00:00:00' AND timestamp < '2013-02-01 00:00:00'
GROUP BY category
세부 사항을 here 수 있습니다처럼
표 보인다.
- 데이터
- 테이블이 약 데이터의 거대한 볼륨을 저장합니다 실시간으로 테이블에 공급된다 다음이 있음을 을 감안할 때. 보고서 쿼리의
- 구조는
- 데이터를 변경하지 않습니다 10,00,000+ 기록이 범주를 필터링 할 것, 날짜로부터
- 시간 (모든 선택적 매개 변수입니다) 날짜에 만 날짜 관련이 없습니다 일부는
MyTbl
에서 값을 갖는 새 테이블을 정기적으로 실행하고 업데이트 할 예약 된 작업을 실행하는 것이 좋습니다 될 것이다? 새 테이블은 보고서 쿼리와 비슷하게 보입니다.
Date | Category | Sent | Received | Blocked | Opened
이 테이블은 범주 및 날짜 필터를 적용하여 쿼리됩니다. 이 방법
부정적 우리는 여전히 매일 데이터를 관리해야
- 우리는 여전히 GROUP BY와 SUM을 적용해야
- 댄 필요 이상의 데이터베이스 작업이있을 수 있습니다 원래 접근 방식
- 우리는 실시간으로 제공되는 모든 데이터를 얻지 못할 것입니다. 이 방법
긍정적 :
정렬, 속도 업 수있는 디스플레이의 과정을 데이터베이스에서 가져 오는 레코드를-속도 및 페이징 수 있습니다
- 는
이것이 가능한 방법입니까? 프로세스 속도를 높이는 다른 방법이 있습니까? 도와주세요!
LINQ to SQL –
을 사용하면 저장 프로 시저를 시도 할 수도 있습니다. 그들은 SQL 쿼리 –
@sourabhdevpura를 훨씬 빠르게 실행합니다. 이것은 저장 프로 시저만을 사용하여 실행됩니다. SQL 쿼리를 사용하여 간단하게 만들었습니다. –