/*

SELECT * FROM [dbo].[FN_SPLIT] ('감기,콧물,어지러움,콧물기침,,가래,몸살',',')

*/

CREATE FUNCTION [dbo].[FN_SPLIT]

(

    @PARAM VARCHAR(MAX) -- 대상문자열

    , @DIV VARCHAR(1) -- 특정구분자

)

RETURNS

@RESULT TABLE

(

    [VALUE] VARCHAR(MAX)

    , [ORDER] INT

)

AS

 

BEGIN

 

 

    DECLARE @INDEX INT

    DECLARE @POS INT

    DECLARE @ORDER INT

    DECLARE @TEMP VARCHAR(MAX)

 

 

 

    SET @INDEX = 1

    SET @POS = 1

    SET @ORDER = 1

 

 

 

    WHILE @POS > 0

    BEGIN

        SET @POS = CHARINDEX(@DIV, @PARAM, @INDEX)

 

 

 

        IF @POS = 0

        BEGIN

            SET @TEMP = RIGHT(@PARAM, LEN(@PARAM) - @INDEX + 1)

        END

        ELSE

        BEGIN

            SET @TEMP = SUBSTRING(@PARAM, @INDEX, @POS - @INDEX)

        END

 

 

 

        IF LEN(@TEMP) > 0

        BEGIN

            SET @TEMP = RTRIM(LTRIM(@TEMP))

            INSERT INTO @RESULT VALUES (@TEMP, @ORDER)

        END

 

 

 

       SET @INDEX = @POS + 1

       SET @ORDER = @ORDER + 1

 

 

    END

 

RETURN

END

 

 

 

--실행결과--

SELECT * FROM [dbo].[FN_SPLIT] ('감기,콧물,어지러움,콧물기침,,가래,몸살',',')

'프로그램 > - Sql' 카테고리의 다른 글

MSSQL2008 튜닝 자료  (0) 2011.11.14
MS2008 로그확인 & 사이즈 축소  (0) 2011.11.14
MS SQL 중복값제거하기  (0) 2011.11.14
SQL서버 메모리사용  (0) 2011.07.05
[Coalesce] Text Sum  (0) 2011.07.05

-- 중복 데이터 확인
      SELECT  Title, COUNT(*) AS CNT
         FROM  TableName
  GROUP BY  Title
      HAVING  COUNT(*) > 1


-- 결과
Title   CNT
----   ---
1        5
2        4
3        2.

(3개 행 적용됨)

-- 실행
SELECT  COUNT(*)
   FROM  TableName
-- DELETE TableName
 WHERE  Seq NOT IN (SELECT  MAX(Seq)
                                    FROM  TableName
                             GROUP BY  Title)

'프로그램 > - Sql' 카테고리의 다른 글

MS2008 로그확인 & 사이즈 축소  (0) 2011.11.14
Split사용자 함수  (0) 2011.11.14
SQL서버 메모리사용  (0) 2011.07.05
[Coalesce] Text Sum  (0) 2011.07.05
FOR XML  (0) 2011.07.05

첫시작은 쿼리였다.

머냐 이느린 속도는... 하나하나 풀어보며 최종 문제는 Table!!!

이건뭐 3천건뿌니안되는 테이블이 머이리 느려???

 

로컬로 받아 테스트해보니 뭥미! 왜또 빨라 ㅡ.ㅡ;;

 

로컬과 실서버와의 Select 시간 차가 7초가난다.

 

문제가 멀까...

 

이리저리 뒤적뒤적 서버 사용 메모리를보니 90%이상을 사용중이군 메모리문제인가???

 

관련 정보 url임

http://www.sqler.com/?mid=bUserLec&page=43&document_srl=104466

 

해결될지는 아직 잘 모르겠군.

 

일단 정보는 기록!

 

세션검사 테이블

select * from master.sys.dm_exec_sessions
select * from master.sys.dm_exec_connections

 

 

이건 테이블이나 뷰의 데이터와 인덱스 조각 정보 표시

 

DBCC SHOWCONTIG

DBCC SHOWCONTIG (Table)
DBCC SHOWCONTIG (Table, Index)
DBCC SHOWCONTIG (Table) WITH FAST

 

WITH FAST -- 인덱스의 고속 검색과 최소 정보 출력 수행 여부를 지정합니다.
                     고속 검색은 인덱스의 리프 또는 데이터 수준 페이지를 읽지 않습니다.
WITH NO_INFOMSGS -- 심각도가 0에서 10 사이인 모든 정보 메시지를 표시하지 않습니다.

'프로그램 > - Sql' 카테고리의 다른 글

Split사용자 함수  (0) 2011.11.14
MS SQL 중복값제거하기  (0) 2011.11.14
[Coalesce] Text Sum  (0) 2011.07.05
FOR XML  (0) 2011.07.05
[MS-SQL] 조각모음  (0) 2011.04.06

USE tempdb

GO

--테스트자료만들기

CREATE TABLE 가족 (id INT, Val VARCHAR(10))

INSERT 가족 VALUES (1,'한수')

INSERT 가족 VALUES (2,'지우')

INSERT 가족 VALUES (3,'선우')

INSERT 가족 VALUES (4,'')

INSERT 가족 VALUES (5,'찬우')

-- 데이터확인

SELECT * FROM 가족

GO

 

 

DECLARE @str VARCHAR(100)

SELECT @str= COALESCE(@str+',' , '') + Val FROM 가족

SELECT @str

GO

 

결과값 : 한수,지우,선우,숙,찬우

'프로그램 > - Sql' 카테고리의 다른 글

Split사용자 함수  (0) 2011.11.14
MS SQL 중복값제거하기  (0) 2011.11.14
SQL서버 메모리사용  (0) 2011.07.05
FOR XML  (0) 2011.07.05
[MS-SQL] 조각모음  (0) 2011.04.06
FOR XML 프로그램/- Sql 2011. 7. 5. 18:19

SQL2005의 기능인 FOR XML

 

 SELECT id,name,[address],email
    FROM member
 FOR XML AUTO,ELEMENTS,ROOT('Root')

 

---출력결과

<Root> <--ROOT('Root')

  <member> <--테이블명
    <id>ID입니다</id> <--컬럼명
    <name>김개똥</name><--컬럼명
    <address>서울시대전구대구동</address><--컬럼명
    <email>mdj1234@naver.com</email><--컬럼명
  </member>
  <member>
    <id>ID입니다</id>
    <name>김개똥</name>
    <address/>

    <email/>

  </member>

</Root>

상세내용은 MDSN...

http:///msdn2.microsoft.com/en-us/library/ms345137.aspx

'프로그램 > - Sql' 카테고리의 다른 글

Split사용자 함수  (0) 2011.11.14
MS SQL 중복값제거하기  (0) 2011.11.14
SQL서버 메모리사용  (0) 2011.07.05
[Coalesce] Text Sum  (0) 2011.07.05
[MS-SQL] 조각모음  (0) 2011.04.06

조각상태 확인

DBCC SHOWCONTIG

 

데이터를 입력,수정,삭제를 하다보면 인덱스에 조각화가 일어난다.

조각화가 많아지면 성능이 느려진다.

 

그럼, 다시 정리를 해줘야지!!

 

인덱스를 다시 작성하는 방법에는

 

-. DBCC DBREINDEX

 

-. DBCC INDEXDEFRAG

 

-. ALTER INDEX ALL ON 테이블명 REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)


이 있다..

 

여기에서 속도도 가장 빠르고 효율적인것이..

 

MS-SQL 2005 이상에서 지원하는 아래의 쿼리다.

  

ALTER INDEX ALL ON 테이블명 REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)


  

테이블 하나씩 하나씩 언제하냐고??

 

한방에 해당 데이터베이스의 인덱스를 정리하는 방법을 알려 달라고???

 

해당 데이터베이스의 모든 테이블의 모든 인덱스를 재정리하는 쿼리다.

 

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

 

DECLARE @i int, @sql varchar(1000)

DECLARE @tablename varchar(1000),@ownerName  varchar(1000)

 

SET @i = 1

 

DECLARE DB_Cursor CURSOR FOR

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME

OPEN DB_Cursor

 

FETCH NEXT FROM DB_Cursor

INTO @ownerName, @tablename

WHILE @@FETCH_STATUS = 0

BEGIN

 

SET @sql = 'ALTER INDEX ALL ON ' + @ownerName + '.' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '

EXEC (@sql)

 

PRINT CONVERT(VARCHAR, @i) + '__' + @ownerName + '.' + @tablename + '............ OK'

SET @i = @i + 1

 

FETCH NEXT FROM DB_Cursor

INTO @ownerName, @tablename

 

END

 

CLOSE DB_Cursor

DEALLOCATE DB_Cursor


 

[출처] [MS-SQL] 인덱스를 다시 정리하자(조각모음)|작성자 inno

'프로그램 > - Sql' 카테고리의 다른 글

Split사용자 함수  (0) 2011.11.14
MS SQL 중복값제거하기  (0) 2011.11.14
SQL서버 메모리사용  (0) 2011.07.05
[Coalesce] Text Sum  (0) 2011.07.05
FOR XML  (0) 2011.07.05