2015-01-01 3 views
1

특정 조건을 만족하는 이벤트 수를 계산하고 싶습니다. 행 수가 100 만 미만이면 실제 숫자를 얻고 싶습니다. 백만 명이 넘으면 정확한 숫자를 알 필요가 없으므로 카운트를 1 백만으로 반환하는 것이 좋습니다.최대 절전 모드 - 하위 선택 개수 얻기

나는이 쿼리가 분리 된 기준을 수행 할 수있는 방법

select count(*) from (select id from events where x=10 limit 1000000) a 

/하위 기준에 대한 생각?

위의 SQL 이외의 더 나은 방법이 있습니까? 내가 사용하고 쿼리가 일반 수보다 더 잘 수행, 그래서 대신 시도하지 것이다 9.3

답변

1

PostgreSQL의 :

long count = ((Number) 
    session.createCriteria(Event.class) 
      .setProjection(Projections.rowCount()) 
      .add(Restrictions.eq("x", 10)) 
      .uniqueResult()).longValue(); 
long countLimit = Math.min(count, 1000000); 
+0

감사를 시도 . 코드 "select count (*) from (x = 10 제한 1000000 이벤트에서 ID 선택)"은 전체 테이블이 아니라 1M 이하로 계산되므로 더 빠르게 실행됩니다. 전체 테이블을 계산 한 후 최소 시간은 더 오래 걸립니다. – user1409708

+0

아쉽게도 Hibernate는 WHERE 절 내에서만 하위 쿼리를 사용할 수 있습니다. 표 표현식을 사용할 수 없습니다. 이를 위해 네이티브 쿼리를 사용해야합니다. –

0

을 내가 을 알 수있는 바와 같이 일부 레코딩을 계산 할 필요가있는 경우> 1000000을 1 백만 + 그 외 정확한 수를 표시해야합니다. 이 당신의 고양이를 위해이 쿼리

String t; 
      t = (String) session.createQuery(
        "select case when count(*)>1000000 " 
        + "then '1Million +' " 
        + "else count(*) " 
        + "end " 
        + "from events").uniqueResult(); 
       session.getTransaction().commit(); 

       System.out.println("size is " + t); 

사용하여 답변 CASE [ WHEN {test_conditional} THEN {match_result} ]* ELSE {miss_result} END https://docs.jboss.org/hibernate/orm/4.3/devguide/en-US/html/ch11.html#d5e3280

+0

제안 해 주셔서 감사합니다. 쿼리의 성능은 전체 테이블을 계산하는 것과 같습니다. 내 목표는 1M에 도달하면 계산을 중단하는 것입니다. – user1409708