달력

52025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형

MySQL을 사용하다 보면 무분별하게 나도 모르게 무분별하게 LIMIT를 사용하는것을 볼 수 있다.

다른 개발자분들은 어떠신지 잘 모르겠지만, 대용량 데이터베이스에서는 LIMIT만큼은 절대로 피해야 한다.

실제로 예전에 10억개의 데이터를 가공하는데 LIMIT를 쓰니 쿼리 하나가 몇일이 걸리는 사태가 발생하곤 했다.


간단하게 테스트 테이블을 만들어서 테스트 해보자. 데이터는 2천만개가 들어있다. 천만개째부터 5만개를 가져오는 쿼리이다.
11.216초 걸렸다.


EXPLAIN을 찍어보니 인덱스를 타지 않는것을 알 수 있다. 인덱스만 타도 좋을텐데...

 

위와 같이 쿼리를 바꿔보았다. 0.031초 걸렸다. 위와 같이 바꾸었을때 단점은 게시판처럼 동적으로 글이 늘어나는경우 IDX값을 정의하기 어렵다. 하지만 게시판 같은 경우에는 글쓴시각등으로 처리하는 방법등이 존재한다. 잘 고민하여 설계해 보자.


EXPLAIN을 찍어보니 인덱스를 타는것을 알 수 있다. 인덱스를 타고 천만번째로 바로 이동한 다음에 5만개를 가져올것이다._mixsh_wv_rdate = '2008/09/01 18:21';document.write("");
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

## ORACLE
SELECT
    txt
FROM
    table    
ORDER BY
    DECODE(txt,'서울',1,'경기',2,'인천',3,4)


## MySQL
SELECT
    txt
FROM
    table    
ORDER BY
    CASE txt 
        WHEN '서울' THEN 1
        WHEN '경기' THEN 2
        WHEN '인천' THEN 3
        ELSE 4
    END
 
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

http://blog.naver.com/reomereome/40051397806

 SELECT @ROWNUM:=@ROWNUM+1 AS NO, AA.필드명1, AA.필드명2
 FROM (SELECT 필드명1, 필드명2 FROM 테이블명 WHERE 조건절 ORDER BY 정렬필드 ASC) AA, (SELECT @ROWNUM:=0) R

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

* Web서버

 Web에서 서버 기능을 처리하는 프로그램으로서 HTTP라는 프로토콜을 기반으로 하여 Web클라이언트(브라우저)로 부터의 요청을 서비스하는 기능을 담당한다.

* WAS (Web Application Server 웹 어플리케이션 서버)
Web 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시 된 것으로, 크게 Web 서버의 기능과 컨테이너의 기능으로 구성되어 있다.

 

 

 
 

Servlet컨테이너 
클라이언트에서 전송되는 Servlet요청에 대하여 Servlet을 수행하는 프로그램

 

JSP컨테이너
JSP를 Servlet으로 변화하는 기능의 프로그램으로 JSP컨테이너 역시 Servlet으로 구현된 프로그램

 

Web어플리케이션
다양한 공급자가 만든 다양한 컨테이너에서 구동될 수 있고, 꾸러미(압축파일)로 만들 수 있는 Servlet, HTML, JSP 그리고 활용 목적의 클래스 등의 자원을 모아 놓은 것

 

컨텍스트
WAS가 관리하는 Web어플리케이션 단위

 

컨텍스트 패스
각 Web어플리케이션을 구분하는 가상패스명으로서 일반적으로 Web어플리케이션의 최상위 디렉토리명으로 정함

 

 

* 시스템 구현 (Web 서버와 WAS)

일반적으로 학습 목적일 경우에는 일단 <웹 서버 + 웹 컨테이너 + 웹 어플리케이션 서버>의 기능을 가지고 있는 톰캣(Tomcat)만 설치할 것이다. 이것은 단지 JSP 기반의 웹 프로그래밍의 학습을 위해이다. 하지만, 실제로 현업에 일을 하게 되면 웹 서버와 웹 어플리케이션 서버를 따로 설치한 환경에서 개발을 한다. 톰캣 하나만 설치하는 것과 웹 서버와 웹 어플리케이션 서버를 따로 설치하는 것이 프로그래밍 코딩에 영향을 미치지는 않는다. 한글 처리와 몇 가지의 설정만 차이가 날 뿐이다.

다만 웹 서버와 웹 어플리케이션 서버를 설치하는 이유는 서버 성능을 향상시키기 위한 것이다. 사용자들이 웹 사이트에 접속을 했을때 빠른 응답을 주기 위해서이다.

 

 

########################################################################

"경기 여성 e-러닝 센터" 사이트를 참고로 다시 작성했습니다.

########################################################################  

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

========================================

- 레지스터 등록 : Regsvcs HelloComponent.dll 

- 레지스터 재 등록 : Regsvcs.exe /reconfig HelloComponent.dll

- 레지스터 키 받기 : sn -k HelloComponent.snk


========================================
RegSvr32  MyComSvr.DLL

만약  삭제를  해야  한다면
RegSvr32  /u  MyComSvr.DLL



닷넷에서는?  ㅋ
RegSvcs  라는  명령어가  닷넷  버전마다  제공됩니다.  ㅋ



RegSvr32를  이용하여  DLL을  등록하는  의미는
레지스트리에  CLSID를  등록함으로써  COM서버가  샐행될  수  있게  하기  위함입니다. 

==================================================================

적용 대상

발생한 오류 메시지에 대한 설명이 이 문서에 없으면 다음 Microsoft 기술 자료에서 오류 메시지를 설명하는 다른 문서를 참조하십시오.

315854 Windows 98 및 Windows Me 오류 메시지 리소스센터

요약

Regsvr32 도구(Regsvr32.exe)를 사용하여 자동 등록할 수 있는 동적 연결 라이브러리(DLL) 또는 ActiveX 컨트롤(OCX) 같은 개체 연결 및 포함(OLE) 컨트롤을 등록하고 등록 해제할 수 있습니다. 이 도구는 Windows, Microsoft Internet Explorer 또는 다른 프로그램에서 발생하는 일부 문제를 해결하는 데 필요할 수 있습니다. 예를 들어, Microsoft 기술 자료의 다음 문서에서는 Windows Update 사이트에서 설치하기 전에 Regsvr32.exe를 사용하여 Wuv3is.dll 컨트롤을 등록 해제해야 합니다.

241122 WINUP: 제품 업데이트를 누르면 응용 프로그램 오류가 발생한다

컨트롤 등록에 실패하거나 성공하지 못한 OLE 컨트롤 등록 시도의 문제 해결에 대한 개발자 정보가 필요하면 Microsoft 기술 자료의 다음 문서를 참조하십시오.

140346 OLE 컨트롤 등록 실패의 가능한 원인

추가 정보

Regsvr32.exe는 Microsoft Internet Explorer 3.0 이상, Windows 95 OEM 서비스 릴리스 2(OSR2) 이상 및 Microsoft Windows NT 4.0 서비스 팩 5(SP5) 이상에 포함되어 있습니다. Regsvr32.exe는 System(Windows Me/98/95) 또는 System32(Windows NT) 폴더에 설치됩니다.

Regsvr32.exe 사용법

RegSvr32.exe에는 다음 명령줄 옵션이 있습니다. Regsvr32 [/u] [/n] [/i[:cmdline]] dllname /u - Unregister server<BR/> /i - Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall /n - do not call DllRegisterServer; this option must be used with /i Regsvr32.exe를 사용하면 구성 요소를 로드하고 해당 DLLSelfRegister 함수를 호출하려고 시도합니다. 이 시도가 성공하면 Regsvr32.exe는 성공을 나타내는 대화 상자를 표시합니다. 시도가 실패하면 Regsvr32.exe는 Win32 오류 코드를 포함할 수 있는 오류 메시지를 반환합니다. Win32 오류 코드 목록은 다음 Microsoft 웹 사이트를 참조하십시오.

http://msdn.microsoft.com/library/en-us/netdir/adsi/win32_error_codes.asp

예를 들어, Sample.ocx ActiveX 컨트롤을 수동으로 등록하려면 MS-DOS 프롬프트에서 다음 명령을 입력하십시오.

c:\regsvr32.exe sample.ocx

Regsvr32.exe 오류 메시지

다음 목록에는 RegSvr32 오류 메시지와 가능한 원인에 대한 설명이 들어 있습니다.

인식할 수 없는 플래그: /invalid_flag

플래그나 스위치의 잘못된 조합을 입력했습니다. 본 문서의 "Regsvr32.exe 사용법" 절을 참조하십시오.

DLL 이름을 지정하지 않았습니다.

.dll 파일 이름을 포함시키지 않았습니다. 본 문서의 "Regsvr32.exe 사용법" 절을 참조하십시오.

Dllname을(를) 로드했으나 DllRegisterServer 또는 DllUnregisterServer 시작점이 없습니다.

Dllname은 .dll 또는 .ocx 파일이 아닙니다. 예를 들어, regsvr32 wjview.exe를 입력하면 이 오류 메시지가 생성됩니다.

Dllname은(는) 실행 파일이 아니며 이 파일 형식에 대한 등록 도우미도 등록되어 있지 않습니다.

Dllname은 실행 파일(.exe, .dll 또는 .ocx)이 아닙니다. 예를 들어, regsvr32 autoexec.bat를 입력하면 이 오류 메시지가 생성됩니다.

Dllname을(를) 로드했으나 DllRegisterServer 또는 DllUnregisterServer 시작점이 없습니다.

Dllname을 내보내지 않았거나 Dllname의 손상된 버전이 메모리에 있을 수 있습니다. Pview를 사용하여 파일을 검색하고 제거하는 것을 고려하십시오.

Dllname is not self-registerable or a corrupted version is in memory.

예를 들어, regsvr32 icwdial.dll을 입력하면 Icwdial.dll 파일이 자동 등록 파일이 아니기 때문에 이 오류 메시지가 나타납니다. 메모리에 Dllname 의 손상된 버전이 있다고 의심되면 컴퓨터를 다시 시작하거나 파일의 원래 버전을 다시 추출해 보십시오. Windows NT를 실행 중인 경우 Microsoft Windows NT Server 4.0 Resource Kit의 Kill 또는 Pview 도구를 사용해야 할 수 있습니다 . 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

197155 잘못된(Orphaned) 프로세스를 종료하는 방법

OleInitialize를 실패했습니다(또는 OleUninitialize를 실패했습니다).

Regsvr32는 필요한 COM 라이브러리 함수를 호출하고 종료할 때 라이브러리를 초기화되지 않도록 하려면 COM 라이브러리를 초기화해야 합니다. 이러한 오류 메시지는 COM 라이브러리를 초기화하거나 초기화되지 않도록 하려는 시도가 실패할 경우 발생합니다. 예를 들어, Ole32.dll 파일이 손상되었거나 잘못된 버전일 수 있습니다.

LoadLibrary("Dllname")를 실패했습니다. GetlastError가 0x00000485을(를) 반환했습니다.

Winerror.h에서 0x00000485 = 1157 (ERROR_DLL_NOT_FOUND)는 "이 응용 프로그램을 실행하는 데 필요한 라이브러리 파일 중 하나를 찾을 수 없습니다."라는 의미입니다. 예를 들어, regsvr32 missing.dll을 입력하면 Missing.dll 파일을 찾을 수 없기 때문에 이 오류 메시지가 나타납니다.

LoadLibrary("Dllname")를 실패했습니다. GetLastError가 0x00000002을(를) 반환했습니다.

Winerror.h에서 0x00000002 = 2 (ERROR_FILE_NOT_FOUND)는 "지정한 파일을 시스템에서 찾을 수 없습니다."라는 의미입니다. 즉, 종속 DLL을 찾을 수 없었습니다. 예를 들어, Tapi32.dll(종속)이 누락된 상태로 regsvr32 icwdial.dll을 입력하면 다음 오류 메시지가 반환됩니다.

LoadLibrary("dskmaint.dll")를 실패했습니다. GetLastError가 0x000001f을(를) 반환했습니다.

Winerror.h에서 0x000001f = 31 (ERROR_GEN_FAILURE)은 "시스템에 부착된 장치가 작동하지 않습니다."라는 의미입니다. Win16 .dll 파일을 등록하려고 하면 이 문제가 발생할 수 있습니다. 예를 들어, regsvr32 dskmaint.dll을 입력하면 다음 오류 메시지가 반환됩니다.

Dllname의 DllRegisterServer(또는 DllUnregisterServer) 실패. 반환된 오류 코드: string

string은 Winerror.h를 검색하십시오.

Regsvr32.exe 및 종속성

RegSvr32.exe는 Kernel32.dll, User32.dll 및 Ole32.dll 파일(Windows NT에서는 Msvcrt.dll 및 Advapi32.dll 파일)에 종속됩니다. Regsvr32.exe는 모든 종속성과 함께 등록이나 등록을 해제하려는 파일을 로드합니다. 필요한 파일이 없거나 손상된 경우 프로세스가 실패할 수 있습니다.

Depends.exe를 사용하여 등록이나 등록을 해제하려고 하는 파일의 종속성을 확인할 수 있습니다. Depends.exe는 Microsoft Windows 98 Resource KitMicrosoft Windows NT 4.0 Resource Kit 지원 도구에 포함되어 있습니다.

247024 Microsoft Windows 98 Resource Kit에 포함된 도구


반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

다음에 소개할 14가지 팁들은 여러분이 Transact SQL문으로 쿼리를 작성할때 성능상의 이유로 꼭 지켰으면 하는 것들이다.

 

  • where 절을 사용하여 쿼리의 결과셋을 제한한다.

    이것은 성능에 가장 영향을 미치는 것으로 클라이언트에게 모든 결과가 아니라 꼭 필요한 결과만 반환하도록 한다. 이렇게하면 쓸모없는 네트웍 트래픽을 감소시킬 수 있으며 쿼리 성능도 향상된다.

     

  • 테이블의 모든 컬럼이 아닌 필요한 컬럼의 레코드만 반환한다.

    역시 성능에 영향을 미치며 클라이언트에게 필요한 컬럼의 데이터만 반환하여 쓸모없는 트래픽을 감소시키고 쿼리 성능을 향상시킨다.

     

  • 뷰나 스토어드 프로시져를 사용한다.

    긴 쿼리문을 네트웍으로 전송하는것에 비해 뷰나 스토어드 프로시져는 그 이름만 전송하기 때문에(파라미터가 있다면 이것도 포함) 네트웍 트래픽을 감소시킬 수 있다. 게다가 보안관리까지 할 수 있기 때문에 여러분이 사용자에게 숨겨야하는 컬럼의 액세스 제한을 할 수 있다.

     

  • 가능한한 SQL Server 커서의 사용을 피한다.

    SQL Server 커서는 select문에 비해 성능상에 좋지 않다. 행단위의 처리가 필요하다면 상관질의나 유도된 테이블을 사용하도록 노력하자.

     

  • 테이블의 로우 갯수를 알고 싶다면 select count(*) 대신 다른 방법을 사용한다.

    select count(*)의 경우 테이블을 스캔해서 전체 로우를 반환하기 때문에 큰 테이블에서는 시간이 오래 걸린다. 이 경우 sysindexs 시스템 테이블을 사용한다. 이 테이블의 ROWS 컬럼은 각 테이블의 총 로우갯수를 값으로 가지고 있다. 따라서 select count(*) 대신 다음의 쿼리를 사용할 수 있다.

    SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2

    이 방법은 select count(*)에 걸리는 시간을 단축시켜준다.

     

  • 가능한한 트리거 대신에 제약조건을 사용한다.

    제약조건은 트리거보다 성능면에서 훨씬 효율적이다. 따라서 가능한한 제약조건을 사용한다.

     

  • 임시테이블 대신 테이블 변수를 사용한다.

    테이블 변수는 임시테이블에 비해 잠금과 로깅 작업에 적은 리소스가 소모된다. 따라서 가능한한 테이블 변수를 사용한다. 테이블 변수는 SQL Server 2000에서만 가능하다.

     

  • 가능한한 HAVING절의 사용을 피한다.

    Having절은 GROUP BY에 의한 결과를 제한할때 사용한다. GROUP BY에 Having절을 사용하였을 경우 GROUP BY에 의해서 결과들을 모두 집계한 다음 Having절에 명시한 조건으로 맞지 않는 결과를 버리게 된다. 대부분의 경우 Having절의 필요없이 GROUP BY와 Where절만으로 원하는 결과를 얻을 수 있다.

     

  • 가능한한 DISTINCT 문의 사용을 피한다.

    DISTINCT문을 사용할 경우 소트에 따른 성능 하락이 있기 때문에 꼭 필요한 경우에만 사용한다.

     

  • 결과에 적용된 행의 갯수를 표시하지 않아도 된다면 프로시져에 SET NOCOUNT ON을 추가한다.

    몇개의 행이 적용되었는지가 전달되지 않기 때문에 네트웍 트래픽이 감소한다.

     

     

  • 처음 몇개의 행만 필요하다면 TOP이나 SET ROWCOUNT문을 사용한다.

    결과 전체가 아닌 일부분만 반환하기 때문에 네트웍 트래픽을 감소시킬수 있다.

     

  • 몇개 로우의 빠른 반환이 필요하다면 FAST number_rows 힌트를 사용한다.

    이를 사용하면 n 로우를 빠르게 얻을 수 있으며 이후 쿼리는 계속 실행되서 전체 결과를 만들어낸다.

     

  • 가능한한 UNION 대신에 UNION ALL을 사용한다.

    UNION ALL이 UNION보다 훨씬 빠르다. 왜냐하면 UNION ALL은 로우의 중복검사를 하지않는 반면에 UNION은 중복행이 있건없건간에 중복검사를 수행하기 때문이다.

     

  • 쿼리에 옵티마이져 힌트를 사용하지 않는다.

    SQL Server의 쿼리 옵티마이져는 매우 뛰어나기 때문에 여러분이 임의로 쿼리에 옵티마이져 힌트를 사용할 경우 대부분의 경우 쿼리 성능에 안좋은 영향을 미친다.

  • 반응형
    Posted by 친절한 웬디양~ㅎㅎ
    |
    반응형

    CDONTS 컴포넌트는 Window 2000 Server에서만 지원된다.

    Window 2000 Server에서는 "CDONTS, CDO" 컴포넌트가 모두 지원이 됬지만

    Window 2003 Server에서는 "CDO"만 지원된다.

    따라서, 2003에서는 CDO를 이용해 웹메일을 구현해야만 한다.



     

    == CDO를 이용한 웹메일 서비스 ======================================

    <%
    sch = "http://schemas.microsoft.com/cdo/configuration/"
     
    Set cdoConfig = CreateObject("CDO.Configuration")
     
    With cdoConfig.Fields
     .Item(sch & "sendusing") = 1               'cdoSendUsingPort 1=내부, 2=외부
     .Item(sch & "smtpserverport") = 25     'SMTP Port
     .Item(sch & "smtpserver") = "local"     'Mail Server Address or Domain or "localhost"
     .update
    End With
     
    Set cdoMessage = CreateObject("CDO.Message")
     
    With cdoMessage
      Set .Configuration = cdoConfig
     .From = "dazzilove@naver.com"                       '보내는이 메일주소
     .To = "dazzilove@naver.com"                           '받는이 메일주소
     .Subject = "Sample CDO Message"                   '메일제목
     .TextBody = "This is a test for CDO.message"  '메일형식지정 : HtmlBody or TextBody

     .AddAttachment "c:\boot.ini"                            '파일첨부 (생략가능)
     .Send
    End With


    Set cdoMessage = Nothing
    Set cdoConfig = Nothing
    %>

    ===========================================================




     

    만약, Exchange가 설치되어 있다면, 한가지 작업을 더 해주셔야 합니다.^^
    IIS관리자의 해당 웹사이트 {속성}의 {홈 디렉토리} 탭에서 {응용 프로그램 풀}을 {ExchangeApplicationPool}로 지정하셔야 합니다. 

    반응형
    Posted by 친절한 웬디양~ㅎㅎ
    |