500 개 미만의 레코드가있는 테이블 만 스캔하도록 SQL 쿼리 제한

아론 찬

내 데이터베이스의 모든 필드에있는 모든 값을 통과하는 다음 스크립트를 만들었습니다.

그러나 이것은 매우 시간이 많이 걸리는 작업이므로 500 개 이하의 레코드가있는 테이블 만 통과하도록 제한하고 어쨌든 관련없는 데이터로 채워진 큰 테이블을 건너 뛰고 싶습니다.

im은 varchar (256)을 테이블 이름으로 사용하기 때문에 테이블에 내 COUNT를 포함하는 방법을 알아내는 데 문제가 있습니다.

USE [Name of Database]
DECLARE @SearchStr nvarchar(100) = 'Text to search fields for'
DECLARE @Results TABLE (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL

BEGIN
    SET @ColumnName = ''
    SET @TableName = 
    (
        SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
        FROM     INFORMATION_SCHEMA.TABLES
        WHERE         TABLE_TYPE = 'BASE TABLE'
            AND    QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
            AND    OBJECTPROPERTY(
                    OBJECT_ID(
                        QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                         ), 'IsMSShipped'
                           ) = 0
    )

    WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)

    BEGIN
        SET @ColumnName =
        (
            SELECT MIN(QUOTENAME(COLUMN_NAME))
            FROM     INFORMATION_SCHEMA.COLUMNS
            WHERE         TABLE_SCHEMA    = PARSENAME(@TableName, 2)
                AND    TABLE_NAME    = PARSENAME(@TableName, 1)
                AND    DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
                AND    QUOTENAME(COLUMN_NAME) > @ColumnName
        )

        IF @ColumnName IS NOT NULL

        BEGIN
            INSERT INTO @Results
            EXEC
            (
                'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
                FROM ' + @TableName + ' (NOLOCK) ' +
                ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
            )
        END
    END    
END

SELECT ColumnName, ColumnValue FROM @Results

이를 달성하기위한 도움이나 제안을 주시면 대단히 감사하겠습니다.

발 렉스

sys.dm_db_partition_stats 테이블 에서 대략적인 방법을 사용할 수 있습니다 . 이 코드에서와 같이 JOIN을 추가하십시오.

    ...
    SET @TableName = 
        (
            SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
            FROM     INFORMATION_SCHEMA.TABLES

            --add this JOIN 
            JOIN 
              (
                SELECT
                   object_name(object_id) as Table_Name
                FROM sys.dm_db_partition_stats
                WHERE (index_id < 2)
                GROUP BY object_name(object_id)
                HAVING SUM(row_count)<=500
              ) as Stat
             ON  INFORMATION_SCHEMA.TABLES.TABLE_NAME = Stat.Table_Name
             -- add this JOIN 


             WHERE         TABLE_TYPE = 'BASE TABLE'
                AND    QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
                AND    OBJECTPROPERTY(
                        OBJECT_ID(
                            QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
                             ), 'IsMSShipped'
                               ) = 0
        )
    ...

자세한 내용 : 매우 큰 테이블에서 정확한 행 수를 계산하는 가장 빠른 방법은 무엇입니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

SQL : 백만 개 이상의 레코드가있는 테이블을 조인하는 방법

분류에서Dev

MYSQL은 테이블이 아닌 두 개의 쿼리에서 일치하는 레코드 만 선택한 다음 B 쿼리로 결과를 정렬합니다.

분류에서Dev

수백만 개의 레코드가있는 데이터베이스를 쿼리하는 Laravel 5.1

분류에서Dev

테이블의 모든 레코드에 대해 SQL 제한 쿼리 작업 만들기

분류에서Dev

3 개의 다른 테이블 기반 데이터 쿼리-테이블에 일치하는 레코드가 있는지 확인한 다음 표시

분류에서Dev

이 SQL 쿼리를 사용하면 값이 중복됩니다. 즉, 테이블에 하나의 레코드 만 있고 8 개의 레코드가 표시됩니다.

분류에서Dev

SQL : 다른 테이블의 값을 기반으로 한 테이블에 레코드가 있는지 여부를 쿼리하는 방법

분류에서Dev

SQL : 다른 테이블의 값을 기반으로 한 테이블에 레코드가 있는지 여부를 쿼리하는 방법

분류에서Dev

여러 항목의 한 행만 가져 오기 위해 4 개의 테이블을 조인하는 Oracle SQL 쿼리

분류에서Dev

2 개의 조건이 충족 된 1 개의 레코드 만 반환하는 SQL 쿼리

분류에서Dev

백만 개의 레코드가있는 인덱스에서 dynamodb 쿼리

분류에서Dev

수천 개의 레코드가있는 3 개의 테이블을 비교하는 MYSQL 쿼리 최적화

분류에서Dev

수백만 개의 레코드가있는 SQL Server 테이블로 텍스트 파일을 가져 오는 방법

분류에서Dev

5 천만 개의 레코드가 있고 증가하는 테이블의 성능을 높이는 방법

분류에서Dev

테이블을 재사용하는 3 개의 테이블에 대한 SQL 쿼리

분류에서Dev

5 천만 개의 행이있는 큰 테이블 쿼리

분류에서Dev

백만 개의 레코드를 빠르게 선택하는 SQL 쿼리

분류에서Dev

카테고리 트리를 형성하는 2 개의 테이블에 대한 SQL 쿼리

분류에서Dev

SQL 쿼리-INSERT이지만 레코드가 이미 존재하지 않는 경우에만?

분류에서Dev

10 만 개의 레코드 테이블 쿼리 중 실행 시간 초과

분류에서Dev

4 개의 테이블을 조인하는 SQL 쿼리

분류에서Dev

5 개의 테이블을 결합하는 SQL 쿼리

분류에서Dev

5 개의 테이블을 결합하는 SQL 쿼리

분류에서Dev

수백만 개의 레코드가있는 테이블에 대한 실시간 집계

분류에서Dev

139 개의 열이있는 테이블에서 중복을 제거하고 모든 열을 다른 테이블에로드하는 SQL 쿼리

분류에서Dev

SQL Server 2014-조인하고 싶지만 레코드가 한 테이블 또는 다른 테이블에 없을 수 있습니다.

분류에서Dev

두 개의 FK가 있지만 한 번에 하나만있는 SQLite 테이블

분류에서Dev

테이블에있는 15 개 레코드의 마지막 쿼리이지만 관련 테이블의 데이터를 포함합니다.

분류에서Dev

왼쪽 테이블의 레코드 만 검색하는 mySQL 쿼리

Related 관련 기사

  1. 1

    SQL : 백만 개 이상의 레코드가있는 테이블을 조인하는 방법

  2. 2

    MYSQL은 테이블이 아닌 두 개의 쿼리에서 일치하는 레코드 만 선택한 다음 B 쿼리로 결과를 정렬합니다.

  3. 3

    수백만 개의 레코드가있는 데이터베이스를 쿼리하는 Laravel 5.1

  4. 4

    테이블의 모든 레코드에 대해 SQL 제한 쿼리 작업 만들기

  5. 5

    3 개의 다른 테이블 기반 데이터 쿼리-테이블에 일치하는 레코드가 있는지 확인한 다음 표시

  6. 6

    이 SQL 쿼리를 사용하면 값이 중복됩니다. 즉, 테이블에 하나의 레코드 만 있고 8 개의 레코드가 표시됩니다.

  7. 7

    SQL : 다른 테이블의 값을 기반으로 한 테이블에 레코드가 있는지 여부를 쿼리하는 방법

  8. 8

    SQL : 다른 테이블의 값을 기반으로 한 테이블에 레코드가 있는지 여부를 쿼리하는 방법

  9. 9

    여러 항목의 한 행만 가져 오기 위해 4 개의 테이블을 조인하는 Oracle SQL 쿼리

  10. 10

    2 개의 조건이 충족 된 1 개의 레코드 만 반환하는 SQL 쿼리

  11. 11

    백만 개의 레코드가있는 인덱스에서 dynamodb 쿼리

  12. 12

    수천 개의 레코드가있는 3 개의 테이블을 비교하는 MYSQL 쿼리 최적화

  13. 13

    수백만 개의 레코드가있는 SQL Server 테이블로 텍스트 파일을 가져 오는 방법

  14. 14

    5 천만 개의 레코드가 있고 증가하는 테이블의 성능을 높이는 방법

  15. 15

    테이블을 재사용하는 3 개의 테이블에 대한 SQL 쿼리

  16. 16

    5 천만 개의 행이있는 큰 테이블 쿼리

  17. 17

    백만 개의 레코드를 빠르게 선택하는 SQL 쿼리

  18. 18

    카테고리 트리를 형성하는 2 개의 테이블에 대한 SQL 쿼리

  19. 19

    SQL 쿼리-INSERT이지만 레코드가 이미 존재하지 않는 경우에만?

  20. 20

    10 만 개의 레코드 테이블 쿼리 중 실행 시간 초과

  21. 21

    4 개의 테이블을 조인하는 SQL 쿼리

  22. 22

    5 개의 테이블을 결합하는 SQL 쿼리

  23. 23

    5 개의 테이블을 결합하는 SQL 쿼리

  24. 24

    수백만 개의 레코드가있는 테이블에 대한 실시간 집계

  25. 25

    139 개의 열이있는 테이블에서 중복을 제거하고 모든 열을 다른 테이블에로드하는 SQL 쿼리

  26. 26

    SQL Server 2014-조인하고 싶지만 레코드가 한 테이블 또는 다른 테이블에 없을 수 있습니다.

  27. 27

    두 개의 FK가 있지만 한 번에 하나만있는 SQLite 테이블

  28. 28

    테이블에있는 15 개 레코드의 마지막 쿼리이지만 관련 테이블의 데이터를 포함합니다.

  29. 29

    왼쪽 테이블의 레코드 만 검색하는 mySQL 쿼리

뜨겁다태그

보관