2017-02-17 8 views
0

sqlx를 사용하여 Go 코드에서 쿼리를 수행하고 있습니다. 쿼리에는 WHERE IN (?) 절에서 필터링해야하는 긴 값 목록 (~ 10,000)이 있습니다. 이로 인해 성능이 크게 저하됩니다. 이러한 쿼리를 어떻게 최적화 할 수 있습니까? 또한이 쿼리는 Redshift 클러스터에서 수행되므로 쿼리 성능을 향상시키기위한 열의 인덱싱은 해결 방법이 아닙니다.Sqlx 긴 목록이 포함 된 쿼리

values := []int64{143, 123, 123, 542....} // ~10,000 elements 
query, args, err := sqlx.In(query, values) 
if err != nil { 
    return nil, err 
} 

query = dbInterface.Rebind(query) 
err = dbInterface.Select(&list, query, args...) 

검색어 :

SELECT * FROM table_name WHERE some_id IN (?) ORDER BY created_at; 
당신은 sqlx을해야
+0

삽입 할 쿼리 및 값 유형을 표시하십시오. 그 가치는 어디에서 비롯된 것입니까? 너의 이동 코드에서? 파일? 다른 테이블? – Patrick

+0

@Patrick이 방금 업데이트했습니다. –

+0

값의 최소/최대 값을 취하여 해당 범위를 쿼리 한 다음 Go 코드에서 원하는 레코드 만 필터링 할 수 있습니다. – saarrrr

답변

0

나는 궁극적으로 IDS에 대한 임시 테이블을 생성하고이 가입 수행. 이로 인해 쿼리 성능이 크게 향상되었습니다.

0

이 이들 중 하나 생산 :

  • values 구문 :

    where some_id in (values (143), (123)) 
    
  • 배열에 가입 :

    select * 
    from 
        t 
        inner join 
        unnest(array[143, 123]) u (id) on u.id = t.id 
    
+0

불행히도 Redshift는 값에 대한 지원을 제공하지 않습니다. –