2012-11-24 2 views
3

Postgres 성능 문제가 있습니다. 나는 약 500K 행의 표를 가지고있다. 일부 글로벌 검색을 수행하고 루틴을 교체해야합니다. 이 두 UPDATE 문 중 하나가 다른 것보다 훨씬 빠를 수 있습니까? 아니면 성능면에서 꽤 유사할까요?Postgres Regex Replace Performance

update mytable 
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g'); 

update mytable 
set mycolumn = regexp_replace(mycolumn, 'ReplaceMe','WithMe', 'g') 
where mycolumn like '%ReplaceMe%'; 

답변

3

일반적으로 where 문을 포함 시키면 SQL 쿼리가 더 빠릅니다. 그래서 두 번째는 확실히 빠를 것입니다. 기본적으로 데이터베이스는 이러한 종류의 작업을 매우 빠르게 수행 할 수 있습니다. 첫 번째 것은 처음에는 전체 목록을 얻은 다음 regex 문을 통해 확인합니다. 후자는 단지 단축 된 목록에서 정규식을 수행해야합니다.

howver는 a_horse_with_no_name이 지적한대로 %ReplaceMe%과 연결된 색인이 없으면 쿼리가 더 빠르게 진행되지 않습니다. regex 명령을 통해 처리되는 항목이 줄어들 기 때문에 여전히 약간 더 빠르게 진행됩니다.

+3

작성된 방식에 따라 where 문을 사용하면 행을 찾는데 걸리는 시간이 줄어들지 않습니다. Postgres는 '% ReplaceMe %'와 같은 표현식이 색인을 사용하지 않기 때문에 (trgm 색인을 사용할 수 없다면) 전체 표를 읽을 가능성이 높습니다. 그러나 두 번째 행은 더 적은 행을 업데이트하므로 더 빨라질 수 있습니다. –

+0

좋아요, 추가했습니다. 정보를 제공해 주셔서 감사합니다! – PearsonArtPhoto

+3

감사. 나는 네 점을 본다. 내 상황의 핵심은 업데이트라고 생각합니다. 어디에 필요하지 않더라도 500K 행을 업데이트합니다. WHERE에서는 변경 될 행만 업데이트합니다 (총 3 % 정도이므로 손이 도움이 될 수있는 곳으로 이동하십시오). – Paulb