복붙노트

[SQL] 가장 빠른 방법은 매우 큰 테이블의 행의 정확한 수를 계산하려면?

SQL

가장 빠른 방법은 매우 큰 테이블의 행의 정확한 수를 계산하려면?

나는 테이블 행의 많은과 열이 많이있을 때 상태가 TABLE_NAME FROM SELECT의 COUNT (*)가 느려질 수 있다는 것을 기사를 가로 질러왔다.

나는 행 심지어 수십억 [약 15 열이] 포함 할 수있는 테이블이 있습니다. 테이블의 행 수의 정확한 수를 얻을 수있는 더 좋은 방법이 있나요?

답변하기 전에 다음 사항을 고려하십시오 :

해결법

  1. ==============================

    1.간단한 대답 :

    간단한 대답 :

    노트:

    COUNT (1) = COUNT (*) = COUNT (기본 키)에 대비해

    편집하다:

    SQL 서버 예 (14 억 행, 12 열)

    SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)
    -- NOLOCK here is for me only to let me test for this answer: no more, no less
    

    (1 개) 실행, 5시 46분 분, 카운트 = 1401659700

    --Note, sp_spaceused uses this DMV
    SELECT
       Total_Rows= SUM(st.row_count)
    FROM
       sys.dm_db_partition_stats st
    WHERE
        object_name(object_id) = 'MyBigtable' AND (index_id < 2)
    

    2 개 실행 모두 일초 이하, 카운트 = 1,401,659,670

    두 번째는 적은 행 = 잘못이있다. 동일하거나 더 쓰기에 따라 (삭제 여기에 시간 밖으로 완료) 될 것

  2. ==============================

    2.MySQL의에 지금까지 가장 빠른 방법은 다음과 같습니다

    MySQL의에 지금까지 가장 빠른 방법은 다음과 같습니다

    SHOW TABLE STATUS;
    

    당신이 원하는 경우 즉시 추가 정보의 많음과 함께 (총 인) 행 개수 모든 테이블을 얻을 것이다.

  3. ==============================

    3.즉, 데이터베이스에 따라 달라집니다. 행 여부를 추적하여 예를 들어 어떤 속도 최대 수는, 행의 수를 추출 할 경우에만 검색 인덱스를 허용, 인덱스 라이브 또는 죽은. 다른 사람은하지 않는, 따라서 전체 테이블을 방문하고 라이브 행 하나 하나 계산이 필요합니다. 어느 큰 테이블에 대한 속도가 느려질 수 있습니다.

    즉, 데이터베이스에 따라 달라집니다. 행 여부를 추적하여 예를 들어 어떤 속도 최대 수는, 행의 수를 추출 할 경우에만 검색 인덱스를 허용, 인덱스 라이브 또는 죽은. 다른 사람은하지 않는, 따라서 전체 테이블을 방문하고 라이브 행 하나 하나 계산이 필요합니다. 어느 큰 테이블에 대한 속도가 느려질 수 있습니다.

    참고 일반적으로 PostgreSQL을의 경우 등 쿼리 최적화 도구, 테이블 통계를 사용하여 좋은 평가를 추출 할 수있는, 예를 들어, 당신은 (*) yourtable에서 수를 설명의 출력을 구문 분석하고 합리적 좋은 평가를 얻을 수 행 수. 어떤 두 번째 질문에 저를 제공합니다.

    진심으로? :-) 당신은 정말 수십억 개의 행이있는 테이블의 정확한 수를 의미? 당신은 정말 확실합니까? :-)

    당신이 정말로 할 경우 당신이 할 경우, 당신은 트리거를 사용하여 전체의 추적하지만, 마음의 동시성과 교착 상태를 유지할 수 있습니다.

  4. ==============================

    4.이 sp_spaceused를 (Transact-SQL)를 시도 할 수 있습니다

    이 sp_spaceused를 (Transact-SQL)를 시도 할 수 있습니다

  5. ==============================

    5.아니, 단순히 귀하의 질문에 대답하려면

    아니, 단순히 귀하의 질문에 대답하려면

    당신이이 일의 독립적 인 방법을 DBMS가 필요한 경우, 가장 빠른 방법은 항상있을 것입니다 :

    SELECT COUNT(*) FROM TableName
    

    일부 DBMS 벤더는 자신의 시스템에 작동 빠른 방법이있을 수 있습니다. 이러한 옵션 중 일부는 이미 다른 답변에 게시됩니다.

    COUNT (*)는 그렇게 자신의 최적화를 우회하려고하지 않는, 어쨌든 DBMS (적어도 어떤 PROD 가치 DB)에 의해 최적화되어야한다.

    보조 노트에서 : 또한 있기 때문에 테이블 크기의 완료하는 데 시간이 오래 걸릴 다른 쿼리의 많은 분들을 생각합니다. 모든 성능 문제는 아마도 마음에 속도 스키마 디자인에 대한 생각에 의해 해결되어야한다. 나는 당신이 변화에 대한 옵션이 아니다라고 인식하지만, 10 개 + 분 쿼리 중 하나를 옵션이 아닌 것으로 판명 수 있습니다. 3 NF는 속도를 필요로하고, 레코드를 함께 저장할 수없는 경우 때로는 데이터가 여러 테이블에서 분할 될 수있을 때 항상 가장 좋은 방법이 아니다. 뭔가에 대해 생각하는 ...

  6. ==============================

    6.SQL Server 버전은 2005/2008 경우, 당신은 테이블의 행 수를 계산하기 위해 DMV에 사용할 수 있습니다 :

    SQL Server 버전은 2005/2008 경우, 당신은 테이블의 행 수를 계산하기 위해 DMV에 사용할 수 있습니다 :

    -- Shows all user tables and row counts for the current database 
    -- Remove is_ms_shipped = 0 check to include system objects 
    -- i.index_id < 2 indicates clustered index (1) or hash table (0) 
    SELECT o.name, 
     ddps.row_count 
    FROM sys.indexes AS i 
     INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID 
     INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID 
     AND i.index_id = ddps.index_id 
    WHERE i.index_id < 2 
     AND o.is_ms_shipped = 0 
    ORDER BY o.NAME 
    

    SQL 서버 2000 데이터베이스 엔진의 경우, sysindexes의 작동하지만 강력가 가까운 장래에 제거 될 수 있으므로 SQL Server의 향후 버전에서 그것을 사용하지 않는 것이 좋습니다.

    샘플 코드에서 가져온 표 행을 얻는 방법을 빠르고 손쉽게이 카운트

  7. ==============================

    7.나는 사용한다

    나는 사용한다

    select /*+ parallel(a) */  count(1) from table_name a;
    
  8. ==============================

    8.나는 대답했다 등의 전문가로 어디에도 해요하지만 난 테이블 (과도 관련이없는)에서 임의의 행을 선택하기 위해 사용 된 절차에 문제를 가지고했지만, 난 내 참조 테이블의 행 수를 알 필요가 임의의 인덱스를 계산합니다. 전통적인 카운트 (*)를 사용하거나 (1) 작업을 카운트하지만 난 가끔 실행하는 내 쿼리 2 초까지 얻고 있었다. 그래서 그 대신 내가 사용하고 (내 테이블 'tbl_HighOrder'라는 이름의) :

    나는 대답했다 등의 전문가로 어디에도 해요하지만 난 테이블 (과도 관련이없는)에서 임의의 행을 선택하기 위해 사용 된 절차에 문제를 가지고했지만, 난 내 참조 테이블의 행 수를 알 필요가 임의의 인덱스를 계산합니다. 전통적인 카운트 (*)를 사용하거나 (1) 작업을 카운트하지만 난 가끔 실행하는 내 쿼리 2 초까지 얻고 있었다. 그래서 그 대신 내가 사용하고 (내 테이블 'tbl_HighOrder'라는 이름의) :

    Declare @max int
    
    Select @max = Row_Count
    From sys.dm_db_partition_stats
    Where Object_Name(Object_Id) = 'tbl_HighOrder'
    

    그것은 잘 작동 및 관리 Studio에서 쿼리 시간은 0이다.

  9. ==============================

    9.음, 도움이 늦게 오년와 확신에 의한 경우 :

    음, 도움이 늦게 오년와 확신에 의한 경우 :

    나는 어떤을 계산하려고했다. 일부 오버플로 오류로 MS SQL Server 관리 Studio 및 달렸다을 사용하여 SQL Server 테이블의 행, 나는이를 밑도는 :

    [DBNAME]에서 COUNT_BIG (1)을 선택 [DBO] FactSampleValue]..;

    결과 :

    24,296,650,578 행

  10. ==============================

    10.신속하게 각 시나리오에 대한 좋은 정리 해보를 제공 martijnh1에서 테이블에 대한 정확한 행 개수를 검색 :이 좋은 기사 SQL 서버-HOW-TO를 발견했다.

    신속하게 각 시나리오에 대한 좋은 정리 해보를 제공 martijnh1에서 테이블에 대한 정확한 행 개수를 검색 :이 좋은 기사 SQL 서버-HOW-TO를 발견했다.

    나는 특정 조건을 기준으로 카운트를 제공 할 필요가 나는이 부분을 이해할 때, 나는 더이 답변을 업데이 트 볼 수있는 곳이 확대 될 필요가있다.

    한편, 여기에 기사의 세부 사항은 다음과 같습니다 :

    방법 1 :

    질문:

    SELECT COUNT(*) FROM Transactions 
    

    코멘트:

    수행하는 전체 테이블 스캔. 큰 테이블에 천천히.

    방법 2 :

    질문:

    SELECT CONVERT(bigint, rows) 
    FROM sysindexes 
    WHERE id = OBJECT_ID('Transactions') 
    AND indid < 2 
    

    코멘트:

    행 개수를 검색하는 빠른 방법입니다. 통계에 따라 다릅니다 부정확하다.

    큰 테이블에 상당한 시간이 걸릴 수 있습니다 COUNT_ROWS, 실행 DBCC UPDATEUSAGE (데이터베이스).

    방법 3 :

    질문:

    SELECT CAST(p.rows AS float) 
    FROM sys.tables AS tbl 
    INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and
    idx.index_id < 2 
    INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) 
    AND p.index_id=idx.index_id 
    WHERE ((tbl.name=N'Transactions' 
    AND SCHEMA_NAME(tbl.schema_id)='dbo')) 
    

    코멘트:

    방법은 SQL 관리 스튜디오 카운트 행 (테이블 등록, 저장, 행 개수 봐). 행의 매우 빠른,하지만 여전히 대략적인 숫자입니다.

    방법 4 :

    질문:

    SELECT SUM (row_count) 
    FROM sys.dm_db_partition_stats 
    WHERE object_id=OBJECT_ID('Transactions')    
    AND (index_id=0 or index_id=1); 
    

    코멘트:

    빠른 (아니지만 빠른 방법 2 등) 운영과 신뢰성, 똑같이 중요.

  11. ==============================

    11.나는 다른 StackOverflow의 질문 / 답변에서이 스크립트를 가지고 :

    나는 다른 StackOverflow의 질문 / 답변에서이 스크립트를 가지고 :

    SELECT SUM(p.rows) FROM sys.partitions AS p
      INNER JOIN sys.tables AS t
      ON p.[object_id] = t.[object_id]
      INNER JOIN sys.schemas AS s
      ON s.[schema_id] = t.[schema_id]
      WHERE t.name = N'YourTableNameHere'
      AND s.name = N'dbo'
      AND p.index_id IN (0,1);
    

    내 표는 5 억 개 기록 및 1ms의보다 위의 수익률을 가지고있다. 그 동안에,

    SELECT COUNT(id) FROM MyTable
    

    전체 39분 52 초 정도 걸립니다!

    그들은 (정확히 519,326,012, 내 경우에는) 행의 숫자를 정확하게 얻을 수 있습니다.

    즉, 항상 그런 것이 있을지 모르겠어요.

  12. ==============================

    12.나는 일반적으로 항상 가장 빠른 해결책이 있다고 생각하지 않습니다 일부 RDBMS가 / 버전 선택 COUNT에 대한 특정 최적화를 (*) 빠른 반면 다른 사람 단순히 테이블 스캔 옵션을 사용하는. 당신은 일반적으로, 어떤 방법으로 인덱스 안타를 기록하는 아마 좀 더 구체적인 질문을해야합니다 두 번째 세트에 대한 문서 / 지원 사이트로 이동해야 할 것입니다.

    나는 일반적으로 항상 가장 빠른 해결책이 있다고 생각하지 않습니다 일부 RDBMS가 / 버전 선택 COUNT에 대한 특정 최적화를 (*) 빠른 반면 다른 사람 단순히 테이블 스캔 옵션을 사용하는. 당신은 일반적으로, 어떤 방법으로 인덱스 안타를 기록하는 아마 좀 더 구체적인 질문을해야합니다 두 번째 세트에 대한 문서 / 지원 사이트로 이동해야 할 것입니다.

    편집하다:

    당신이 증가 값을 참조하는 인덱스 열이 숫자 증가 ID, 말, 또는 타임 스탬프 또는 날짜를 수행 여기에 힘의 작품은, 스키마 및 데이터의 분포에 따라하는 생각입니까? 그런 다음, 삭제가 발생하지 않는 가정이 인덱스에 매우 신속하게 해결해야 벗어나는 횟수, 최근의 값 (어제 날짜, 최근의 샘플 포인트에서 가장 높은 ID 값)로 카운트 최대를 저장하고 추가 할 수 있어야한다 . 어떤 DBMS의 거의 모든 버전에 매우 가치와 지표, 과정에 의존하지만, 적용 할 수 있습니다.

  13. ==============================

    13.이 질문에 늦게,하지만 여기에 (내가 MySQL을 사용으로) 당신이 MySQL을 사용하여 수행 할 수있는 작업입니다. 여기 내 관찰을 공유하고있다 :

    이 질문에 늦게,하지만 여기에 (내가 MySQL을 사용으로) 당신이 MySQL을 사용하여 수행 할 수있는 작업입니다. 여기 내 관찰을 공유하고있다 :

    1) SELECT COUNT(*) AS TOTAL_ROWS FROM <TABLE_NAME>
    

    결과 행 개수 : 508534 콘솔 출력 : 영향을받는 행 : 0 조회 결과 행 : 1 개 경고 : 1 개 쿼리 0 시간 : 0.125 초. 행 많은 수의 테이블에 대해 잠시 필요하지만 행의 수는 매우 정확하다.

    2) SHOW TABLE STATUS or SHOW TABLE STATUS WHERE NAME="<TABLE_NAME>"
    

    결과 행 수 : 511,235 콘솔 출력 : 영향을받는 행 : 0 조회 결과 행 : 1 개 경고 : 0 기간 1 개 쿼리 : 0.250 초 요약 : 행의 개수가 정확하게 일치하지 않는 경우가 많습니다.

    3) SELECT * FROM information_schema.tables WHERE table_schema = DATABASE();
    

    결과 행 수 : 507,806 콘솔 출력 : 영향을받는 행 : 0 조회 결과 행 : 48 개 경고 : 1 개 쿼리 0 시간 : 1.701 초. 행 수는 정확하지 않다.

    나는 MySQL의 또는 데이터베이스 전문가가 아니지만, 나는 매우 큰 테이블의 경우, 옵션 2 또는 3을 사용하여 현재 얼마나 많은 행의 '공정한 아이디어'를 얻을 수 있다는 것을 발견했다.

    나는 UI에 대한 몇 가지 통계를 표시하기 위해이 행 수를 얻을 필요가 있었다. 내가 행의 정확한 수를 표시하지 않고 "500,000 명 이상의 행"등의 통계를 보여주는 내놓았다 그래서 위의 쿼리와 함께, 나는, 총 행이 50보다 더 있다고 알고 있었다.

    어쩌면 정말 OP의 질문에 대답하지 않은,하지만 난 그런 통계가 필요했던 상황에서 무슨 짓을 공유하고있다. 내 경우에는, 대략 행을 보여주는 것은 허용했고 위의 그래서 나를 위해 일했다.

  14. ==============================

    14.정확히는 DBMS에 얽매이지 솔루션은,하지만 적어도 당신의 클라이언트 코드의 차이를 볼 수 없습니다 ...

    정확히는 DBMS에 얽매이지 솔루션은,하지만 적어도 당신의 클라이언트 코드의 차이를 볼 수 없습니다 ...

    INSERT 트리거를 하나의 행과 하나 개의 정수 필드 N1과 다른 테이블 (T)를 생성하고, 생성 바로 실행하는 :

    UPDATE T SET N = N + 1
    

    또한 DELETE TRIGGER 실행하도록 만들기 :

    UPDATE T SET N = N - 1
    

    DBMS의 가치는 그의 염은 작업의 자성이 above2 보장되며, N은 단순히 의해 얻을 후 슈퍼 빠른 항상에서 행의 정확한 수를 포함합니다 :

    SELECT N FROM T
    

    트리거는 DBMS 특정 반면, T에서 선택하는 것은 아니고, 클라이언트 코드가 지원되는 각 DBMS에 대한 변경할 필요가 없습니다.

    테이블이 INSERT 또는 DELETE 집약적 인 경우, 이것은 당신이 / INSERT 후 즉시 COMMIT 삭제하지 마십시오 특히, 일부 확장 성 문제가있을 수 있습니다.

    생산에 더 의미있는 사용 일 - 1이 이름은 단지 자리 표시 자입니다.

    2 즉, 긴 모두 읽기 및 쓰기와 같은 단일 SQL 문에서 수행 될 때 N은, 읽기, N 쓰기 사이의 동시 트랜잭션에 의해 변경 될 수 없습니다.

  15. ==============================

    15.문자 그대로 미친 대답하지만, 사용자가 설정 복제 시스템의 일종이있는 경우, 당신은 거친 추정을 사용할 수 있습니다 (억 행이 시스템에, 나는 당신이 희망)에 의해 값이, 분할 (MAX (PK) 등) 노예의 수는 당신이 병렬로 여러 쿼리를 실행했다.

    문자 그대로 미친 대답하지만, 사용자가 설정 복제 시스템의 일종이있는 경우, 당신은 거친 추정을 사용할 수 있습니다 (억 행이 시스템에, 나는 당신이 희망)에 의해 값이, 분할 (MAX (PK) 등) 노예의 수는 당신이 병렬로 여러 쿼리를 실행했다.

    대부분의 경우, 당신은 이러한 방법에서 가장 키 (또는 같아요 기본 키)를 기반으로 노예에서 쿼리를 분할 할 것 (우리는 우리의 행 / 노예로 250,000,000를 사용하는 겁니다)

    -- First slave
    SELECT COUNT(pk) FROM t WHERE pk < 250000000
    -- Ith slave where 2 <= I <= N - 1
    SELECT COUNT(pk) FROM t WHERE pk >= I*250000000 and pk < (I+1)*250000000
    -- Last slave
    SELECT COUNT(pk) FROM t WHERE pk > (N-1)*250000000
    

    그러나 당신은 단지 SQL 필요가있다. 무엇 흉상. 좋아, 그래서하자 당신이가 피학증있어 말한다. 마스터 (또는 가장 가까운 슬레이브)에이를위한 테이블을 생성 할 가능성이 가장 높은 필요성을 거라고 :

    CREATE TABLE counter_table (minpk integer, maxpk integer, cnt integer, slaveid integer)
    

    대신 만 노예에서 실행 선택을 필요로 그래서, 당신이 유사, 삽입을해야 할 것입니다 :

    INSERT INTO counter_table VALUES (I*25000000, (I+1)*250000000, (SELECT COUNT(pk) FROM ... ), @@SLAVE_ID)
    

    당신은 마스터 테이블에 쓰기 노예 문제로 실행할 수 있습니다. 당신은 더 얻을, 내 말은 창조적 sadis-해야 할 수도 있습니다 :

    -- A table per slave!
    INSERT INTO counter_table_slave_I VALUES (...)
    

    당신은 결국 첫 번째 노예를 기준으로 복제 그래프에 의해 통과 경로에 마지막으로 존재하는 노예가 있어야합니다. 즉, 슬레이브는 이제 다른 모든 카운터 값을해야하고, 자신의 값을 가져야한다. 하지만이 완료 될 때 쯤이면 아마 당신은 당신의 counter_table에서 기록 된 최대 PK 현재 최대 PK 보상 다른 하나를 삽입해야 할 것 때문에 행이 추가가 있습니다.

    그 시점에서, 당신은 전체 행이 무엇인지 파악하는 집계 함수를해야 할 것입니다,하지만 당신은 "당신이 변화 노예의 수"행 가장에서 그것을 실행 것 때문에 그 쉽다.

    당신이 상황에 있다면 당신은 노예에서 별도의 테이블이있는 경우, 당신은 UNION은 당신이 필요로하는 모든 행을 얻을 수 있습니다.

    SELECT SUM(cnt) FROM (
        SELECT * FROM counter_table_slave_1
          UNION
        SELECT * FROM counter_table_slave_2
          UNION
        ...
      )
    

    또는 당신이 알고, 조금 덜 미친하고 (당신에게 너무 미래에 재정 멋진 데이터를 제공합니다) 데이터웨어 하우징 솔루션을 사용 어쩌면 분산 처리 시스템에 데이터를 마이그레이션하거나.

    메모를 수행,이 복제가 설정되어 얼마나 잘 따라 달라 않습니다. 당신이 cruddy 저장이 있거나 잘못 무거운 이웃 소음 데이터 저장소를 분리하는 경우 기본 병목 현상이 가장 가능성, 영구 저장되기 때문에, 이것은 아마 하나의 SELECT COUNT 대기보다 느리게을 실행 (*) ...

    당신이 좋은 복제가 있다면, 그때 당신의 속도 향상이 직접 번호 또는 노예와 관련되어야한다. 혼자 계산 쿼리를 실행하는 데 10 분 소요, 당신은 8 노예가 있다면 사실, 당신은 몇 분 미만으로 시간을 잘라 것입니다. 아마 시간이 솔루션의 세부 사항을 철합니다.

    물론, 이것은 소개합니다에게 행이 삭제 및 삽입 할 수있는 시간이 조금 해결을 분산하기 때문에 당신은 정말 놀라 울 정도로 정확한 답변을 얻을 없었어요,하지만 당신은 동일한 인스턴스에서 행의 분산 잠금을 얻으려고하고 정확한 수를 얻을 수 있습니다 시간의 특정 순간에 대한 테이블의 행.

    사실, 당신은 기본적으로 SQL 전용 솔루션과 붙어있어 이후이 불가능한 것, 그리고 난 당신이 바로, 여러 개의 슬레이브에 걸쳐 분산됩니다 잠겨 쿼리를 실행하는 메커니즘을 제공하고 있다고 생각하지 않습니다. 당신은 말 그대로 의심의 여지가 느린 단지 어쨌든 하나의 시스템에서 카운트 쿼리를 실행하는 것보다없는 이러한 목적을 위해 노예를 회전 할 것입니다 의미 복제 로그 파일 ... 통제했다 아마도합니다.

    그래서 내 두 2013 페니가있다.

  16. ==============================

    16.삽입 트리거가 사용하기에 너무 비싸지 만 삭제 트리거가 주어져야 수 있으며, 자동 증가 ID가있을 경우, 한 번에 전체 테이블을 계산하고, 마지막 수와 마지막 카운트-ID로 카운트를 기억 한 후,

    삽입 트리거가 사용하기에 너무 비싸지 만 삭제 트리거가 주어져야 수 있으며, 자동 증가 ID가있을 경우, 한 번에 전체 테이블을 계산하고, 마지막 수와 마지막 카운트-ID로 카운트를 기억 한 후,

    다음 매일 그냥 ID> 마지막 카운트-id 인 계산 마지막 카운트에 그를 추가하고, 새로운 마지막 카운트-ID를 저장해야합니다.

    삭제 기록 <의 ID가 마지막 카운트-ID를 = 경우 삭제 트리거, 마지막 수를 감소시킬 것이다.

  17. ==============================

    17.당신이 행이 삭제되지 않습니다있는 자동 증가 기본 키 열이 일반 테이블 구조가있는 경우, 다음은 레코드 수를 결정하는 가장 빠른 방법이 될 것입니다 마찬가지로 대부분의 ANSI 호환 데이터베이스를 통해 작동합니다 :

    당신이 행이 삭제되지 않습니다있는 자동 증가 기본 키 열이 일반 테이블 구조가있는 경우, 다음은 레코드 수를 결정하는 가장 빠른 방법이 될 것입니다 마찬가지로 대부분의 ANSI 호환 데이터베이스를 통해 작동합니다 :

    SELECT TOP(1) <primarykeyfield> FROM <table> ORDER BY <primarykeyfield> DESC;
    

    나는 MS SQL 테이블 레코드 카운트를 포함하여 데이터에 대한 하위 두 번째 응답 시간을 필요로 수십억 개의 행을 포함하는 작업. 유사한 SELECT COUNT (*)를 비교하여 프로세스 분 정도 걸릴 것입니다.

  18. ==============================

    18.SQL 서버의 경우이 시도

    SQL 서버의 경우이 시도

    SELECT T.name, 
           I.rows AS [ROWCOUNT] 
    FROM   sys.tables AS T 
           INNER JOIN sys.sysindexes AS I 
                   ON T.object_id = I.id AND I.indid < 2 
    WHERE T.name = 'Your_Table_Name'
    ORDER  BY I.rows DESC 
    
  19. ==============================

    19.sysindexes의에서 행을 선택 ID = OBJECT_ID ( 'TABLENAME') 및 indid가 <2

    sysindexes의에서 행을 선택 ID = OBJECT_ID ( 'TABLENAME') 및 indid가 <2

  20. ==============================

    20.일부 컬럼에 인덱스를 넣습니다. 즉, 최적화 대신 테이블의 전체 검사의 인덱스 블록의 전체 검사를 수행 할 수 있도록해야한다. 그게 당신의 IO는 방법을 비용이 절감됩니다. 전후에 실행 계획 봐. 그리고 벽 시계 시간 두 가지를 측정합니다.

    일부 컬럼에 인덱스를 넣습니다. 즉, 최적화 대신 테이블의 전체 검사의 인덱스 블록의 전체 검사를 수행 할 수 있도록해야한다. 그게 당신의 IO는 방법을 비용이 절감됩니다. 전후에 실행 계획 봐. 그리고 벽 시계 시간 두 가지를 측정합니다.

  21. ==============================

    21.Oracle을 사용하는 경우, 이것에 대해 어떻게 (테이블 통계를 가정 업데이트됩니다)

    Oracle을 사용하는 경우, 이것에 대해 어떻게 (테이블 통계를 가정 업데이트됩니다)

    select <TABLE_NAME>, num_rows, last_analyzed from user_tables
    

    통계가 마지막으로 수집 된 때 last_analyzed 시간을 표시합니다.

  22. ==============================

    22.PostgreSQL을 가진 :

    PostgreSQL을 가진 :

    SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = 'table_name'
    
  23. ==============================

    23.SQL 서버 2016에서, 난 그냥 선택한 후 '저장'탭을 테이블 속성을 확인 할 수 있습니다 -이 날 테이블에서 사용 수, 디스크 공간을 행 제공, 인덱스 공간 사용 등

    SQL 서버 2016에서, 난 그냥 선택한 후 '저장'탭을 테이블 속성을 확인 할 수 있습니다 -이 날 테이블에서 사용 수, 디스크 공간을 행 제공, 인덱스 공간 사용 등

  24. ==============================

    24.MSSQL에 대한 어쩌면 조금 늦었지만이 힘 도움말 등

    MSSQL에 대한 어쩌면 조금 늦었지만이 힘 도움말 등

  25. from https://stackoverflow.com/questions/6069237/fastest-way-to-count-exact-number-of-rows-in-a-very-large-table by cc-by-sa and MIT license