반응형
반응형


use master
go

if object_id('master..sp_search') is not null begin
 drop proc sp_search
end
go


create proc sp_search
(
@searchText varchar(100)
, @type int = 0
)
as
if @type <> 1 begin
select  a.name
from sysobjects a
where exists
        (select *
                from syscomments
                where a.id = id
                and text like '%' + @searchText + '%'
        )
and xtype ='P' and category =0
end else begin
select  a.name
from sysobjects a
where exists
        (select *
                from syscomments
                where a.id = id
                and text like '%' + @searchText + '%'
        )
and (xtype ='V') and category =0
end

반응형
반응형
CREATE TRIGGER 트리거 이름
ON { 테이블이름 | 뷰이름}
[ WITH ENCRYPTION ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
AS
    실행할 SQL 문들

* WITH ENCRYPTION : 트리거의 내용을 암호화시켜서 추후에 내용을 확인할 수 없도록 한다.
* FOR | AFTER | INSTEAD OF : AFTER를 지정하면 해당 테이블에 작업이 수행되고 작업이 정상적으로
 끝난 후에 트리거의 내용이 실행된다. AFTER는 테이블에 대해서만 지정할 수 있으며, 뷰에 대해서는
 지정할 수 없다.
 INSTEAD OF는 테이블 및 뷰에 지정할 수 있지만 뷰에 많이 사용된다. INSTEAD OF를 지정하고 해당
 테이블이나 뷰에 지정한 SQL(INSERT, UPDATE, DELETE)이 작동하면 시도된 SQL은 무시되고
 트리거에 지정된 SQL문이 대신 작동하게 된다. FOR는 AFTER와 동일한 것으로 생각하면 된다.
* INSERT | UPDATE | DELETE : 트리거가 실행되는 이벤트를 지정한다. 하나 이상으로 조합해서
 작동시킬 수 있다.
반응형
반응형
DECLARE cursorTbl_cursor CURSOR
    FOR SELECT LineTotal FROM cursorTbl;

DECLARE @result CURSOR
EXEC sp_describe_cursor @cursor_return = @result OUTPUT,
        @cursor_source = N'GLOBAL',  -- 커서임을 지정
    @cursor_identity = N'cursorTbl_cursor'  -- 커서 이름 지정

FETCH NEXT from @result
WHILE (@@FETCH_STATUS <> -1)
        FETCH NEXT FROM @result



결과중 model :
1 - STATIC(정적)
2 - KEYSET(키 집합)
3 - DYNAMIC(동적)
4 - FAST_FORWARD(빠른 전진)

concurrency :
1 - READ_ONLY(읽기전용)
2 - SCROLL_LOCKS(스크롤 잠금)
3 - OPTIMISTIC(낙관적)

status :
-1 - 커서가 아직 열리지 않은 상태

cursor_scope :
1 - 지역커서
2 - 전역커서

반응형
반응형
EXEC sp_rename '테이블이름.필드', '바뀔필드명', 'COLUMN'
반응형

'연구개발 > SQL2005' 카테고리의 다른 글

DML 트리거의 사용  (0) 2009.06.15
커서 정보 확인  (0) 2009.06.12
시스템 저장 프로시저(Transact-SQL)  (0) 2009.06.11
저장된 프로시저의 이름 및 내용 확인  (0) 2009.06.11
잠금정보 확인  (0) 2009.06.10
반응형
http://msdn.microsoft.com/ko-kr/library/ms187961.aspx

시스템 저장 프로시저(Transact-SQL)

SQL Server에서는 시스템 저장 프로시저를 통해 다양한 관리 및 정보 작업 수행할 수 있습니다. 시스템 저장 프로시저는 다음 표에 표시된 범주별로 그룹화됩니다.

범주 설명

Active Directory 저장 프로시저

SQL Server 인스턴스 및 SQL Server 데이터베이스를 Microsoft Windows 2000 Active Directory에 등록합니다.

카탈로그 저장 프로시저

ODBC 데이터 사전 기능을 구현하고 ODBC 응용 프로그램을 원본 시스템 테이블 변경으로부터 격리합니다.

변경 데이터 캡처 저장 프로시저

변경 데이터 캡처 개체를 사용하도록 설정 또는 해제하거나 해당 개체에 대해 보고합니다.

커서 저장 프로시저

커서 변수 기능을 구현합니다.

데이터베이스 엔진 저장 프로시저

SQL Server 데이터베이스 엔진의 일반적인 유지 관리에 사용됩니다.

데이터베이스 메일 및 SQL 메일 저장 프로시저

SQL Server 인스턴스 내의 전자 메일 작업을 수행합니다.

데이터베이스 유지 관리 계획 저장 프로시저

데이터베이스 성능을 관리하는 데 필요한 주요 유지 관리 태스크를 설정합니다.

분산 쿼리 저장 프로시저

분산 쿼리를 구현하고 관리합니다.

전체 텍스트 검색 저장 프로시저

전체 텍스트 인덱스를 구현하고 쿼리합니다.

로그 전달 저장 프로시저

로그 전달 구성을 구성, 수정 및 모니터링합니다.

자동화 저장 프로시저

표준 Transact-SQL 일괄 처리에서 표준 자동화 개체를 사용할 수 있도록 합니다.

복제 저장 프로시저

복제를 관리합니다.

보안 저장 프로시저

보안을 관리합니다.

SQL Server 프로파일러 저장 프로시저

SQL Server 프로파일러에서 성능 및 작업을 모니터링하는 데 사용합니다.

SQL Server 에이전트 저장 프로시저

SQL Server 에이전트가 예약된 이벤트 기반 작업을 관리하는 데 사용합니다.

XML 저장 프로시저

XML 텍스트 관리에 사용합니다.

일반 확장 저장 프로시저

다양한 유지 관리 작업을 위해 SQL Server 인스턴스에서 외부 프로그램으로의 인터페이스를 제공합니다.

ms187961.note(ko-kr,SQL.100).gif참고:
 특별히 지정되지 않는 한 모든 시스템 저장 프로시저는 성공을 의미하는 값 0을 반환합니다. 실패에 대해서는 0이 아닌 값이 반환됩니다.

ADO, OLE DB 및 ODBC 응용 프로그램에 대해 SQL Server 프로파일러를 실행하는 사용자는 이러한 응용 프로그램이 Transact-SQL 참조에서 다루지 않는 시스템 저장 프로시저를 사용한다는 사실을 알 수 있습니다. 이러한 저장 프로시저는 Microsoft SQL Server 네이티브 클라이언트 OLE DB 공급자 및 SQL Server 네이티브 클라이언트 ODBC 드라이버에서 데이터베이스 API 기능을 구현하는 데 사용합니다. 이러한 저장 프로시저는 사용자 요청을 SQL Server에 전달하기 위해 공급자 또는 드라이버가 사용하는 메커니즘으로 공급자 또는 드라이버에서 내부적으로만 사용하도록 되어 있습니다. SQL Server 기반 응용 프로그램에서 이들을 명시적으로 호출할 수는 없습니다.

SQL Server 기반 응용 프로그램은 이러한 저장 프로시저가 지원하는 API 기능을 통해 그 기능을 완전하게 이용할 수 있습니다. 예를 들어 sp_cursor 시스템 저장 프로시저의 커서 기능은 OLE DB API 커서 속성 및 메서드를 통해 OLE DB 응용 프로그램에 사용할 수 있으며 ODBC 커서 특성 및 함수를 통해서는 ODBC 응용 프로그램에 사용할 수 있습니다.

다음 저장 프로시저는 ADO, OLE DB 및 ODBC의 커서 기능을 지원합니다.

sp_cursor

sp_cursorclose

sp_cursorexecute

sp_cursorfetch

sp_cursoropen

sp_cursoroption

sp_cursorprepare

sp_cursorunprepare

 

다음 시스템 저장 프로시저는 ADO, OLE DB, ODBC에서 Transact-SQL 문을 실행하는 준비/실행 모델을 지원합니다.

sp_execute

sp_prepare

sp_unprepare

sp_createorphansp_droporphans 저장 프로시저는 ODBC ntext, textimage 처리에 사용됩니다.

sp_reset_connection 저장 프로시저는 SQL Server에서 트랜잭션의 원격 저장 프로시저 호출을 지원하는 데 사용됩니다. 이 저장 프로시저는 연결 풀에서 연결이 다시 사용될 때 Audit Login 및 Audit Logout 이벤트도 실행합니다.

다음 표에 있는 시스템 저장 프로시저는 SQL Server 인스턴스 내부 또는 클라이언트 API를 통해서만 사용되며 일반적인 용도로는 사용되지 않습니다. 이 표의 내용은 변경될 수 있으며 호환성을 보장하지 않습니다.

다음 저장 프로시저는 SQL Server 온라인 설명서에 문서화되어 있습니다.

sp_catalogs

sp_column_privileges

sp_column_privileges_ex

sp_columns

sp_columns_ex

sp_databases

sp_datatype_info

sp_fkeys

sp_foreignkeys

sp_indexes

sp_pkeys

sp_primarykeys

sp_server_info

sp_special_columns

sp_sproc_columns

sp_statistics

sp_table_privileges

sp_table_privileges_ex

sp_tables

sp_tables_ex

다음 저장 프로시저는 문서화되어 있지 않습니다.

sp_assemblies_rowset

sp_assemblies_rowset_rmt

sp_assemblies_rowset2

sp_assembly_dependencies_rowset

sp_assembly_dependencies_rowset_rmt

sp_assembly_dependencies_rowset2

sp_bcp_dbcmptlevel

sp_catalogs_rowset

sp_catalogs_rowset;2

sp_catalogs_rowset;5

sp_catalogs_rowset_rmt

sp_catalogs_rowset2

sp_check_constbytable_rowset

sp_check_constbytable_rowset;2

sp_check_constbytable_rowset2

sp_check_constraints_rowset

sp_check_constraints_rowset;2

sp_check_constraints_rowset2

sp_column_privileges_rowset

sp_column_privileges_rowset;2

sp_column_privileges_rowset;5

sp_column_privileges_rowset_rmt

sp_column_privileges_rowset2

sp_columns_90

sp_columns_90_rowset

sp_columns_90_rowset_rmt

sp_columns_90_rowset2

sp_columns_ex_90

sp_columns_rowset

sp_columns_rowset;2

sp_columns_rowset;5

sp_columns_rowset_rmt

sp_columns_rowset2

sp_constr_col_usage_rowset

sp_datatype_info_90

sp_ddopen;1

sp_ddopen;10

sp_ddopen;11

sp_ddopen;12

sp_ddopen;13

sp_ddopen;2

sp_ddopen;3

sp_ddopen;4

sp_ddopen;5

sp_ddopen;6

sp_ddopen;7

sp_ddopen;8

sp_ddopen;9

sp_foreign_keys_rowset

sp_foreign_keys_rowset;2

sp_foreign_keys_rowset;3

sp_foreign_keys_rowset;5

sp_foreign_keys_rowset_rmt

sp_foreign_keys_rowset2

sp_foreign_keys_rowset3

sp_indexes_90_rowset

sp_indexes_90_rowset_rmt

sp_indexes_90_rowset2

sp_indexes_rowset

sp_indexes_rowset;2

sp_indexes_rowset;5

sp_indexes_rowset_rmt

sp_indexes_rowset2

sp_linkedservers_rowset

sp_linkedservers_rowset;2

sp_linkedservers_rowset2

sp_oledb_database

sp_oledb_defdb

sp_oledb_deflang

sp_oledb_language

sp_oledb_ro_usrname

sp_primary_keys_rowset

sp_primary_keys_rowset;2

sp_primary_keys_rowset;3

sp_primary_keys_rowset;5

sp_primary_keys_rowset_rmt

sp_primary_keys_rowset2

sp_procedure_params_90_rowset

sp_procedure_params_90_rowset2

sp_procedure_params_rowset

sp_procedure_params_rowset;2

sp_procedure_params_rowset2

sp_procedures_rowset

sp_procedures_rowset;2

sp_procedures_rowset2

sp_provider_types_90_rowset

sp_provider_types_rowset

sp_schemata_rowset

sp_schemata_rowset;3

sp_special_columns_90

sp_sproc_columns_90

sp_statistics_rowset

sp_statistics_rowset;2

sp_statistics_rowset2

sp_stored_procedures

sp_table_constraints_rowset

sp_table_constraints_rowset;2

sp_table_constraints_rowset2

sp_table_privileges_rowset

sp_table_privileges_rowset;2

sp_table_privileges_rowset;5

sp_table_privileges_rowset_rmt

sp_table_privileges_rowset2

sp_table_statistics_rowset

sp_table_statistics_rowset;2

sp_table_statistics2_rowset

sp_tablecollations

sp_tablecollations_90

sp_tables_info_90_rowset

sp_tables_info_90_rowset_64

sp_tables_info_90_rowset2

sp_tables_info_90_rowset2_64

sp_tables_info_rowset

sp_tables_info_rowset;2

sp_tables_info_rowset_64

sp_tables_info_rowset_64;2

sp_tables_info_rowset2

sp_tables_info_rowset2_64

sp_tables_rowset;2

sp_tables_rowset;5

sp_tables_rowset_rmt

sp_tables_rowset2

sp_usertypes_rowset

sp_usertypes_rowset_rmt

sp_usertypes_rowset2

sp_views_rowset

sp_views_rowset2

sp_xml_schema_rowset

sp_xml_schema_rowset2

반응형

'연구개발 > SQL2005' 카테고리의 다른 글

커서 정보 확인  (0) 2009.06.12
테이블 필드명 변경  (0) 2009.06.12
저장된 프로시저의 이름 및 내용 확인  (0) 2009.06.11
잠금정보 확인  (0) 2009.06.10
index 체크 유무  (0) 2009.06.08
반응형
sys.objects 및 sys.sql_modules

SELECT o.name, m.definition
FROM sys.sql_modules m
 JOIN sys.objects o
 ON m.object_id = o.object_id AND o.type = 'P';


EXECUTE sp_helptext usp_error(프로시저이름);
반응형

'연구개발 > SQL2005' 카테고리의 다른 글

테이블 필드명 변경  (0) 2009.06.12
시스템 저장 프로시저(Transact-SQL)  (0) 2009.06.11
잠금정보 확인  (0) 2009.06.10
index 체크 유무  (0) 2009.06.08
조직도 나타내기 - 재귀적호출  (0) 2009.05.26
반응형

SELECT resource_type, resource_database_id, resource_associated_entity_id, request_mode
FROM sys.dm_tran_locks
반응형
반응형

CREATE PROCEDURE sp_IndexInfo
 @tablename sysname
AS
SELECT @tablename AS '테이블이름',
 I.name AS '인덱스이름',
 I.type_desc AS '인덱스타입',
 A.data_pages AS '페이지개수',
 A.data_pages * 8 AS '크기(KB)',
 P.rows AS '행개수'
FROM sys.indexes I
 INNER JOIN sys.partitions P
  ON P.object_id = I.object_id
   AND object_id(@tablename) = I.object_id
   AND I.index_id = P.index_id
 INNER JOIN sys.allocation_units A
  ON A.container_id = P.hobt_id


EXEC sp_IndexInfo 'TEST'
반응형
반응형

재귀적이란 자기 자신을 호출하는 것을 말한다.

USE sqlDB
GO
CREATE TABLE empTbl (emp NCHAR(3), manager NCHAR(3), department NCHAR(3))
GO

INSERT INTO empTbl VALUES ('나사장', NULL, NULL)
INSERT INTO empTbl VALUES ('김재무', '나사장', '재무부')
INSERT INTO empTbl VALUES ('김부장', '김재무', '재무부')
INSERT INTO empTbl VALUES ('이부장', '김재무', '재무부')
INSERT INTO empTbl VALUES ('우대리', '이부장', '재무부')
INSERT INTO empTbl VALUES ('지사원', '이부장', '재무부')
INSERT INTO empTbl VALUES ('이영업', '나사장', '영업부')
INSERT INTO empTbl VALUES ('한과장', '이영업', '영업부')
INSERT INTO empTbl VALUES ('최정보', '나사장', '정보부')
INSERT INTO empTbl VALUES ('윤차장', '최정보', '정보부')
INSERT INTO empTbl VALUES ('이주임', '윤차장', '정보부')

SELECT * FROM empTbl;

WITH empCTE (empName, mgrName, dept, level)
AS
(
 SELECT emp, manager, department, 0
 FROM empTbl
 WHERE manager IS NULL --상관이 없는 사람이 바로 사장
 UNION ALL
 SELECT AA.emp, AA.manager, AA.department, BB.level+1
 FROM empTbl AS AA INNER JOIN empCTE AS BB
  ON AA.manager = BB.empName
)
SELECT * FROM empCTE ORDER BY dept, level;


--수정
WITH empCTE (empName, mgrName, dept, level)
AS
(
 SELECT emp, manager, department, 0
 FROM empTbl
 WHERE manager IS NULL --사장
 UNION ALL
 SELECT AA.emp, AA.manager, AA.department, BB.level + 1
 FROM empTbl AS AA INNER JOIN empCTE AS BB
  ON AA.manager = BB.empName
)
SELECT replicate('    ', level) + '*' + empName AS [직원이름], dept AS [직원부서]
FROM empCTE ORDER BY dept, level

반응형
반응형

CREATE TABLE test (GBN CHAR(1),VAL CHAR(3))
INSERT test VALUES('A','001')
INSERT test VALUES('A','002')
INSERT test VALUES('A','003')
INSERT test VALUES('A','004')
INSERT test VALUES('A','005')
INSERT test VALUES('A','011')
INSERT test VALUES('B','007')
INSERT test VALUES('B','004')
INSERT test VALUES('B','005')
INSERT test VALUES('B','010')
INSERT test VALUES('C','011')
INSERT test VALUES('C','001')
INSERT test VALUES('C','002')
INSERT test VALUES('C','003')

-------------------------------------------------------
SELECT DISTINCT GBN,
       STUFF((SELECT ',' + VAL AS [text()]
                FROM test b
               WHERE b.GBN = a.GBN
               ORDER BY VAL
                 FOR XML PATH('')),1,1,'') AS VAL
FROM test a

/*
GBN  VAL
---- -----------------------------
A    001,002,003,004,005,011
B    004,005,007,010
C    001,002,003,011
반응형
반응형

윈도우서버 시간 동기화
1. 날짜/시간 등록정보창에서 표준시간대를 선택한 뒤
   - 한국이면 (GMT+09:00) 서울

2. 커멘트프롬프트 창을 실행하고
      C:> net time /setsntp:time.windows.com


타임서버가 자체적으로 있을 시에
C:>net time \\ip주소 /set /yes
반응형

'연구개발 > Study' 카테고리의 다른 글

SVN 설치  (0) 2009.07.14
반응형

프로시저 안에서 다른 프로시저를 호출하고 처리할 경우
호출된 다른 프로시저들은 각각의 프로시저 안에서 트랜잭션이 커밋된 상태일 때
상위 프로시저가 에러 발생시 롤백을 하게 되면 하위 프로시저들은 (중첩된 프로시저) 전체 롤백을 한다.

CREATE PROC test1
BEGIN TRAN
    EXEC PRC_Test2 ''
    EXEC PRC_Test3 '', ''
    IF (@err1 <> )
        BEGIN
            ROLLBACK TRAN
        END
    ELSE
        BEGIN
            COMMIT TRAN
        END
반응형
반응형
BACKUP LOG northwind WITH TRUNCATE_ONLY
GO
USE northwind
GO

sp_helpdb 'northwind' --정보확인
GO

DBCC SHRINKFILE (northwind_LOG, 1, TRUNCATEONLY)
GO

ALTER DATABASE northwind
MODIFY FILE
(
    NAME = 'northwind_LOG'
   ,SIZE = 8000MB --적당한 사이즈로
   ,FILEGROWTH = 100
)
GO

dbcc sqlperf (logspace)

--점검시간에 할 것
--운영중에 실행시 사이즈 완전 축소 후 virtuallog 파일 개수를 줄이는 작업을 같이 하게 됨으로 성능에 좋지 않음.

-- 2008에서는 지원하지 않음
반응형
반응형


mkex.pe.kr 에 '허동석' 님이 작성해 주신 글을 옮겨 옵니다.

---------------------------------------------------------------------------------------------------------------------------------------

페이징 쿼리 종류별로 성능을 비교한 좋은 자료가 있어서 상당부분 인용했습니다.

"ex)"에 들어가는 샘플 쿼리는 바투 락커룸 DB에 파일첨부(TB_AttachFile) 테이블을 대상으로 페이징 쿼리를 작성해 봤습니다.

5번에 표시된 내용이 데이터 건수에 상관없이 실질적으로 가장 빠르지만 우리 시스템에 적용할 수 있는지는 의문이 갑니다. 테이블 별로 인덱스 생성이 필요할 수 있고 중간에 데이터가 삭제되거나 어떤 반응이 생길 때 문제가 될 소지가 있는지도 조사해야 할 것 같습니다.

참고로 웹젠 빌링에서 사용하던 페이징 쿼리는 4번을 이용했었습니다.
그리고 2번에 샘플 쿼리를 보면 TB_AttachFile 테이블에 FileGuid가 None Clustered Index로 걸려 있어서 서브쿼리 내에서도 ORDER BY FileGuid DESC를 해줘야합니다.(즉 ORDER BY 를 2번 해야한다는..)
대부분의 기본키들이 None Clustered Index 라 이 점에 대한 이슈도 있습니다.

1. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]  

  레코드셋의 AbsolutePage를 이용해서 페이징을 했습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile



2. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
   WHERE [글번호필드] NOT IN (SELECT TOP [제거할 게시물수] [글번호필드] FROM [테이블명])

   예전에 태요 사이트에서 보았던 쿼리 구문입니다.. NOT IN 때문에.. 문제시 되었던 쿼리구문이죠.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid NOT IN
(
 SELECT TOP 0 FileGuid
 FROM TB_AttachFile
 ORDER BY FileGuid DESC
)
ORDER BY FileGuid DESC


3. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
   WHERE [글번호] IN (SELECT TOP [페이지출력 갯수] [글번호] FROM
   (SELECT TOP [불러올 총 게시물수] [글번호] FROM [테이블 명]) AS A ORDER BY [글번호])
   ORDER BY [글번호] DESC

   이 쿼리 구문은 2번의 쿼리 구문의 문제점을 보완한 구문입니다. NOT IN 대신에 IN을 사용 했습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid IN
(
 SELECT TOP 123 FileGuid -- 총 데이터수 - ( (페이지수 - 1) * 10) // 1페이지 : 123 - 0, 2페이지 : 123 - 10 ...
 FROM
 (
  SELECT FileGuid
  FROM TB_AttachFile
 )AS A
 ORDER BY FileGuid
)
ORDER BY FileGuid DESC


4. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블 명]
   WHERE [글번호] <= (SELECT MIN([글번호])
   FROM (SELECT TOP [제거할 게시물수] + 1 [글번호] FROM [테이블명]) AS A)

   4번째 쿼리 구문은 IN, NOT IN이 아닌 출력할 마지막 글번호 바로 앞이 글번호를 찾아서 처리를 해주는
   쿼리 구문입니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid <=
(
 SELECT MIN(FileGuid)
 FROM
 (
  SELECT TOP 11 FileGuid -- (현재페이지수-1) * 10 + 1 
  FROM TB_AttachFile
  ORDER BY FileGuid DESC
 )AS A
)
ORDER BY FileGuid DESC


5. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블명]
   WHERE [글번호] <= (SELECT MIN([글번호])
   FROM (SELECT TOP [제거할 게시물수] + 1 [글번호]
   FROM [테이블명] WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]) AS A
   WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호])
   AND [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]

   5번재 쿼리는.. 글에 인덱스(가칭)라는 필드를 하나 더 추가 해서.. 글 기본 2000개마다 (가변적입니다)
   인덱스를 증가 시켰습니다. 즉 2000개를 하나의 묶음으로 만든것입니다.
   그 인덱스를 기준으로 처리를 해주었습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid <=
(
 SELECT MIN(FileGuid)
 FROM
 (
  SELECT TOP 11 FileGuid -- (현재페이지수-1) * 10 + 1 
  FROM TB_AttachFile
  WHERE IDX_FileGuid > 350  -- 350은 이전 페이지의 끝 게시물 번호. (350보다 큰 10개를 얻음.)
  ORDER BY FileGuid DESC
 )AS A
)
ORDER BY FileGuid DESC


결과.

게시물은 100만개를 넣고 테스트를 했습니다
서버정보 : CPU : p4-1.8, RAM : 768Mb, 컴팩 프리자리오 2820AP, 환경 : 윈도우2003 MSSQL2000
처음페이지(1), 마지막 페이지(50000) 처리 시간이 아래와 같습니다.(단위 ms)
 첫페이지 실행    끝페이지 실행
1 :  273                 11476.56
2 :  289                 4406.25
3 :  289                 2695.31
4 :  289                 1218.75
5 :  7.81                23.44

반응형

+ Recent posts

반응형