더 빠른 SQL 쿼리를 위한 21가지 데이터베이스 튜닝 규칙
누구나 더 빠른 데이터베이스 쿼리를 원하며, SQL 개발자와 DBA 모두 이런 목표를 달성하기 위해 오랜 사용으로 효과가 입증된 여러 가지 방법에 의지한다. 하지만 안타깝게도 그 어떤 방법이라도 하나만으로는 완벽하거나 확실하지 않다. 이처럼 모든 쿼리를 미세조정, 즉 튜닝하기 위한 정답이 존재하지는 않지만, 길을 밝히는데 도움이 되는 풍부한 관례가 있다. 몇 가지는 RDMBS에 관련된 사항들이지만, 대부분의 팁은 모든 관계형 데이터베이스에 적용된다. SQL 서버, 오라클, DB2, 사이베이스, MySQL, 아니면 다른 관계형 데이터베이스 플랫폼 중 어디에서 코딩을 하고 있더라도, 목표는 같다. 데이터베이스가 가능한 빨리 쿼리를 처리하는 동시에 현실적으로 가능한 많은 동시 사용자를 지원하는 것이다. 이..
2022. 12. 6.
MS-SQL 쿼리를 이용하여 문자열을 배열로 전환하기
MS-SQL(시퀄) 서버에서 저장 프로시저(Stored Procedure; SP)를 사용하다 보면 흔히 접하는 문제들 중 하나이다. 표준 시퀄 쿼리는 배열을 지원하지 않기 때문에 여러가지 꼼수들을 사용해서 문자열을 배열로 변환시키곤 하는데, 아래 소개할 방법도 그런 것들 중 하나이다. 시퀄 서버 2005 버전부터 PATINDEX()1라는 함수를 새롭게 도입했다. 와일드카드(%)를 이용해서 문자열의 위치를 찾아내는 함수인데, 이를 이용하면 손쉽게 문자열을 잘라서 배열 형태의 테이블로 저장할 수 있게 된다. 아래 스크립트를 보자. DECLARE @items NVARCHAR(MAX) SET @items = '111,222,333,444,555,666,777,888,999' DECLARE @delimit..
2022. 12. 6.
날짜계산함수 datediff, dateadd 등
dateadd -- 월의 마지막 날 select dateadd(month,1,getdate())-day(getdate()) -- 월의 첫째날 select dateadd(day,-(day(getdate()-1)), getdate()) -- 월의 13개월전 첫째날 select dateadd(month,-12,getdate())-(day(getdate())-1) -- 1일 더하기 select dateadd(day,1,getdate()) -- 1월 더하기 select dateadd(month,1,getdate()) -- 1년 더하기 select dateadd(year,1,getdate()) datediff datediff( 시간단위구분자, 시작시간, 종료시간 ) getdate()+1 은 현재시간에서 ..
2022. 12. 6.