요약효율적인 방법
(SQL 서버 2005) 동적 SQL의 많은 수를 실행하기위한 효율적인 방법이 있나요? 시스템에 새로운 경기가 매일 그들에게 이메일로 전송 -
세부
우리의 시스템은 사용자가 "이메일 알림"구독을 만들 수 있습니다.
구독은 검색 키워드 사용을 포함하여 여러 옵션을 허용합니다. 나 자신이 작성한 구문 분석기는 and
, or
및 대괄호 ()
을 고려하여 적절한 SQL 코드를 출력합니다. 파서는 SQL 인젝션에 사용할 수있는 어떤 것도 허용하지 않습니다. 각각 때문에,
SELECT *
FROM [VW_EMAIL_ALERT]
WHERE ([SEARCH] LIKE '%this%' AND ([SEARCH] LIKE '%that%' OR [SEARCH] LIKE '%other%'))
각각의 밤, 모든 구독을 개별적으로 처리됩니다 ...
예를 들어이 키워드는 this (that or other)
로 사용자가 입력 할 수 있으며 그 결과 쿼리는 약으로 끝날 것 잠재적으로 고유합니다. 결과적으로 일괄 처리는 모든 구독에 대해 커서를 실행하고 sp_executesql
을 통해 SQL을 실행해야합니다.
분명히 이것은 매우 비효율적이며 심각한 과부하를 유발할 수 있습니다. 어떤 경우에는 시간 초과가 발생할 수 있습니다. 이 처리를 실행하는 저장 프로 시저는 구독을 블록으로 분할하여 코딩되므로 모두 한꺼번에 호출되는 것은 아닙니다.
더 효율적이고 효과적인 방법이 있습니까?
참고 : 우리의 고객 중 일부는 아직도 그 기술
바보 같은 질문을하지만 당신은 정적 SQL을 사용하여 변경할 수 없습니다 검색보다 키워드에 와일드 카드 스피
? (예, 스키마를 변경하기 위해 많은 노력을 기울일 수 있습니다.) Btw "순수한"동적 또는 파라 메트릭 다이나믹을 사용하고 있습니까? – jean
%는 a =가있는 와일드 카드가 아닙니다. 쓰여진대로 어디에서 결코 사실이 될 수 없습니다. – Paparazzi
이것은 약간의 도움이 될 수 있습니다. http://stackoverflow.com/questions/13259850/dynamic-sql-and-stored-procedure-optimization –