Select 문의 후 줄 수 있어야 합니다. # 39 의 what& 최적의 SQL 외곽진입?

39 m 발굴하고자 하는 i& 열 한 곳에서, 그리고 데릭쉐퍼드와 표 (no 조인) 이 수가 행뿐만 전에 내가 먼저 행뿐만 검색하는 것이 가장 좋습니다. 나는 두 가지 방식은 내려와 정보를 제공하는 데릭쉐퍼드와.

  • 외곽진입 1:*
SELECT COUNT( my_table.my_col ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'

그럼

SELECT my_table.my_col
  FROM my_table
 WHERE my_table.foo = 'bar'

또는 외곽진입 2

SELECT my_table.my_col, ( SELECT COUNT ( my_table.my_col )
                            FROM my_table
                           WHERE my_table.foo = 'bar' ) AS row_count
  FROM my_table
 WHERE my_table.foo = 'bar'

때문에 나는 이 일을 하는 마이 SQL 드라이버구성 (SQL 네이티브 클라이언트 9.0) 사용할 수 있는 SELECT 문은 허용하지 않습니다 스크라로카운트 알아야 할 수는 있지만 그 전에 내 행뿐만 어레이에서는 할당하고자 위해 할당 정보 예정이다. 즉, 사용하여 동적으로 할당된 컨테이너입니다 죄송합니다. 선택 사항이 아닙니다 이 지역 내 프로그램였어

나는 것을 우려하는 다음과 같은 상황이 발생할 수 있습니다.

  • SELECT for 카운트입니다 테스트타사의
  • 다른 명령어 테스트타사의 행일, 추가 또는 제거
  • SELECT for data 테스트타사의 갑자기 이 어레이에는 가 잘못된 크기.
  • 더 이상의 시도할 경우, 이 데이터를 기록할 수 있는 내 프로그램였어 어레이에는 제한값 및 사고

외곽진입 2 는 이 문제를 금지?

또한 두 개 중 하나를 더 빠를 것으로 외곽진입? 그렇다면 어떤?

마지막으로, 더 나은 외곽진입 갖고 있는지 생각해 보아야 합니다. (아마도 수 있는 방법을 알려 줄 수 있는 선택 행뿐만 반품해야 드라이버를 사용한 결과 스크라로카운트?)

위에서 언급한 것과 함께, 나는 그 질문에 대한 기본 c++컴파일러는 사용하여 SQL 드라이버 (Microsoft 에서 제공하는.)

질문에 대한 의견 (1)

39 you& 경우, re SQL Server 사용 후 선택할 수 있고, 쿼리를 @@RowCount 함수 (또는 경우 결과 집합을 가지고 있을 수 2 개 이상의 억원으로으로 행뿐만 list. RowCount_Big () 함수). 이 수를 반환되므로 의해 선택된 행뿐만 행뿐만 삽입 / 업데이트 / 삭제 또는 번호를 영향을 받는 전날 성명을 발표했다.

SELECT my_table.my_col
  FROM my_table
 WHERE my_table.foo = 'bar'

SELECT @@Rowcount

행 또는 스케쳐내 카운트입니다 비슷한 결과가 포함된 전송됩니까 외곽진입 # 2 를 사용할 수 있습니다. [3] [끝날거요 절]

SELECT my_table.my_col,
    count(*) OVER(PARTITION BY my_table.foo) AS 'Count'
  FROM my_table
 WHERE my_table.foo = 'bar'

조항을 통해 사용할 때보다 훨씬 더 나은 성능을 얻기 위해 사용하는 서브케리 줄 수 있을 것이다. @@Rowcount 사용하여 최상의 성능을 갖게 될 수 있기 때문에, 모든 비용은 t # 39 좁히어 won& 쿼리하지 @@RowCount 기술서임을 선택

이에 대해 업데이트하십시오 셀명: 내가 준 예는 행) 에 의해 정의된 줄 것이라고, 이 경우 &quot my_table.foo&quot 의해 파티션에만 # 파티션에만 -;). 각 행의 는 열의 값이 # 와 동일한 값을 my_table.foo. 행 예를 들어, & # 39 절 = 있으므로, 여기서 my_table.foo 쿼리하지 경식도 &quot bar& # 39 의 동일한 가치를 갖게 될 my_table.foo &quot,, 모든 행을 결과 세트, 그러므로 모든 행과 열에 값을 받을 수 있다. (이 경우) 의 이 같은 비유하 # 행의 질의입니다.

다음은 각 행 즉 열이 더 좋은 방법 예 / 간단해진다는 포함 총 # 의 행을 결과 세트. 단순히 분리하십시오 옵션임 파티션에만 by 절입니다.

SELECT my_table.my_col, count(*) OVER() AS 'Count'
  FROM my_table
 WHERE my_table.foo = 'bar'

[4]: http://msdn.microsoft.com/en-us/library/ms189461.aspx &quot http://msdn.microsoft.com/en-us/library/ms189461.aspx";

해설 (3)
해결책

두 가지뿐입니다 수 있는 방안을 100% 것이 확실한 COUNT (*) '와' 실제 쿼리하지 부여하느뇨 일관됨 결과:

  • '통합' COUNT (*) 와 같이 쿼리하지 너회의 외곽진입 2. 내가 아니라 당신의 acrobatconnectcentral. 상관식 서브케리 폼 양식 추천합니까 보여줄 수 있습니다 나온 의견을 코구스.
  • 1 에 거래를 시작한 뒤 같이 사용하여 두 개의 쿼리합니다 너회의 외곽진입 ',' 또는 '' 격리인 레벨이네 스냅사진의 시리얼화가 가능합니다

그 중 하나를 사용하여 만든 새로운 행뿐만 격리인 수준에서는 다른 중요한 이유는 격리인 수준이 제대로 볼 수 있는 다른 클라이언트가 될 수 있도록 현재 트랜잭션입니다. Msdn 설명서를 읽고 대한 자세한 내용은 '설정되었습니다 트랜잭션 격리'.

해설 (2)

항상 맞는 결과를 계수 2 는 복귀하십시오 외곽진입 설정되었습니다.

내가 이 연결할 수 있다고 해서, 서브쿼리 제안하세요 데이터베이스에구성원을 외부 조건에 따라 카운트입니다 표시되어도 쿼리하지 찼음을 일치시킵니다 http://cowcast. creativecow. 데이터세트를.

SELECT 
  mt.my_row,
 (SELECT COUNT(mt2.my_row) FROM my_table mt2 WHERE mt2.foo = mt.foo) as cnt
FROM my_table mt
WHERE mt.foo = 'bar';
해설 (2)

39 우려가 있는 경우, re you& 행 수를 변경할 수 있는 조건을 충족합니다 쿼리하고 읽어들이기를 결과, 이후 몇 밀리초입니다 실행 할 수 있습니다 / 실행하십시오 인사이드라면 쿼리합니다 트랜잭션:

BEGIN TRAN bogus

SELECT COUNT( my_table.my_col ) AS row_count
FROM my_table
WHERE my_table.foo = 'bar'

SELECT my_table.my_col
FROM my_table
WHERE my_table.foo = 'bar'
ROLLBACK TRAN bogus

이는 올바른 값이 항상 반품하십시오.

또한, 만약 you& # 39, re SQL Server 사용, 마지막 행의 개수는 @@ROWCOUNT 사용할 수 있는 출력을 얻을 수 있으며, 실제 영향을 받는 기술서임을 리디렉션하십시오 임시 테이블 또는 테이블 가변으로 쿼리하지 복귀하십시오 수 있도록 하는, 아니 아예 모든 거래.

DECLARE @dummy INT

SELECT my_table.my_col
INTO #temp_table
FROM my_table
WHERE my_table.foo = 'bar'

SET @dummy=@@ROWCOUNT
SELECT @dummy, * FROM #temp_table
해설 (1)

몇 가지 아이디어를:

  • Go 크기조정할 추가 결과를 수용할 수 있는 이 어레이에는 외곽진입 # 1 과 같이 자동으로 조절됩니다 또는 사용 유형에 필요한 (rec.601 don& # 39, t 언급하십시오 can& 그래서 좀 더 구체적으로 어떤 언어를 사용하고, t # 39). 모두 실행할 수 있는 트랜잭션 내에서 외곽진입 # 1 - 제표를 보장하기 위한 데이터베이스 지원 경우 이 두 차례에 걸쳐 들려주시겠습니까 같습니다.
  • I& # 39 m, 잘 모르는 수행하고 있는 데이터를 저장하지 않고 먼저 모두야 신앙이니라 처리할 수 있다 이 결과가 될 수 있는 최선의 방법이다.
해설 (0)

정말 간에 변경될 경우 해당 줄 수 있다는 우려를 갖고 있는 select count 와 select 문을 왜안돼요 행뿐만 선택 붙여넣습니다 임시 표를 먼저? 그래야 걸 알잖나 동기화 상태가 됩니다.

해설 (0)

이 추가 발생할 수 있기 때문에 그냥 구글 엔드입니다 질문이예요 상단형 내가 이 sqlite 의 로카운트 사용할 수 있습니다.

WITH temptable AS
  (SELECT one,two
   FROM
     (SELECT one, two
      FROM table3
      WHERE dimension=0
      UNION ALL SELECT one, two
      FROM table2
      WHERE dimension=0
      UNION ALL SELECT one, two
      FROM table1
      WHERE dimension=0)
   ORDER BY date DESC)
SELECT *
FROM temptable
LEFT JOIN
  (SELECT count(*)/7 AS cnt,
                        0 AS bonus
   FROM temptable) counter
WHERE 0 = counter.bonus
해설 (0)

이 유형의 데이터를 처리하기 위한 더 나은 패턴을 생각을 할 수도 있습니다.

아니 자체 프레스펙팅 sql 쿼리를 시용되는 행뿐만 드라이버구성 알려드립니다 반환되므로 행을 반환 전에 때문에 답변이 변경 (거래, 사용하지 않으면 문제를 만들 수 있는 자체.)

39, t change - 구글 및 SQL won& 행뿐만 수가 있다.

해설 (2)
IF (@@ROWCOUNT > 0)
BEGIN
SELECT my_table.my_col
  FROM my_table
 WHERE my_table.foo = 'bar'
END
해설 (0)

39, 벡터 결과 등을 넣어 don& 왜 t you? # 39, 크기를 알 수 없는 이쪽요 너회가 don& 전에 손.

해설 (11)