본문 바로가기

Web/ASP

asp에서 DB파라미터 넘기기

[출처] 필군의 사는 이야기 ""

ASP에서 쿼리를 짜실때

"SELECT menu_defaultYN  FROM APT_MENU_INFO WHERE menu_idx = " & i

이렇게 짜는것은 성능에 좋지 않습니다...

그냥 소규모 사이트라면 상관없지만 규모가 좀 되는 사이트라면

저렇게 사용하는것 보다는 파라미터 쿼리를 사용하시길 권장해 드립니다.


아래 소스로 설명을 좀 드리면

<%

    '안좋은쿼리

    strSql = "SELECT menu_defaultYN  FROM APT_MENU_INFO WHERE menu_idx = " & i

    Set objCmd = CreateObject("ADODB.COMMAND")

    With objCmd

        .ActiveConnection = DB

        .CommandType = adCmdText

        .CommandText = strSQL

        .Execute

    End With


    '권장하는 파라미터쿼리

    strSql = "SELECT menu_defaultYN  FROM APT_MENU_INFO WHERE menu_idx = ?  "

    Set objCmd = CreateObject("ADODB.COMMAND")

    With objCmd

        .ActiveConnection = DB

        .CommandType = adCmdText

        .CommandText = strSQL

        .Parameters.Append .CreateParameter("@menu_idx", adInteger, adParamInput, , i)

        .Execute

    End With


%>


위의 안좋은 쿼리에서 i 값에 따라 쿼리가

"SELECT menu_defaultYN  FROM APT_MENU_INFO WHERE menu_idx = 1"

"SELECT menu_defaultYN  FROM APT_MENU_INFO WHERE menu_idx = 2"


이런식으로 넘어가겠죠?

SQL서버에는 옵티마이저(SQL문장을 실행하는데 가정 적절한 데이터 추출 계획을 결정하는 판단기 또는 내부 아키텍처) 라는 놈은

이둘이 전혀 다른 쿼리라고 생각합니다....그래서 쿼리가 실행될때마다 실행계획을 다시 세우고 실행하게 되죠..

하지만 밑에 알려드린 파라미터 쿼리는 ? 라는 놈을 파라미터로 인식하기 때문에

저둘이 파라미터 값만 틀리고 동일한 쿼리라고 인식을 하게 됩니다...

즉 동일하게 인식하면 처음 실행할때만 실행계획을 짜고 실행한후 실행계획을 DB의 메모리에 저장해 놓습니다.

그 다음부터 저 쿼리가 들어오면 실행계획을 짤 필요없이 메모리에 저장된 실행 계획에 따라서 실행을 하게 됩니다.

실행계획을 짜는 시간을 아낄수 있으니 성능상으로 더 빨라지게 되죠...