programing

문자열을 일치시켜 SQL에서 두 테이블을 비교하는 가장 좋은 방법은 무엇입니까?

lastmoon 2023. 8. 25. 23:55
반응형

문자열을 일치시켜 SQL에서 두 테이블을 비교하는 가장 좋은 방법은 무엇입니까?

API에서 데이터를 가져와서 분 단위로 데이터의 차이를 캡처하는 것이 목표인 프로그램이 있습니다.세 개의 테이블이 포함됩니다.표 1(새 데이터의 경우), 표 2(이전 분 데이터의 경우), 결과 표(결과의 경우).

프로그램의 순서는 다음과 같습니다.표 1 업데이트 -> 표 2와의 차이를 계산하고 그 차이로 "결과" 표를 업데이트합니다. -> 표 1을 표 2에 복사합니다.

그러면 반복됩니다!이것은 간단하고 효과적입니다.

다음은 SQL 쿼리입니다.

Insert into Results (symbol, bid, ask, description, Vol_Dif, Price_Dif, Time) Select * FROM(
        Select symbol, bid, ask, description, Vol_Dif, Price_Dif, '$now' as Time FROM ( 
        Select t1.symbol, t1.bid, t1.ask, t1.description, (t1.volume - t2.volume) AS Vol_Dif, (t1.totalPrice - t2.totalPrice) AS Price_Dif
        FROM `Table_1` t1 
        Inner Join (
        Select id, volume, ask, totalPrice FROM Table_2) t2 
        ON t2.id = t1.id) as test 

그 테이블들은 분명히 구조가 같습니다.기본 키는 자동으로 증가하는 'id' 필드입니다.보시다시피, 저는 이 'id' 필드가 동일하다는 것을 기준으로 두 표를 비교하고 있습니다.

문제는 API가 일관성이 없어 보인다는 것입니다.API 호출 하나에 50,000개의 항목이 포함됩니다.다음은 51,000개의 출품작이 있을 것입니다.그리고 엔트리는 단순히 끝에 추가되거나 처음에 추가되는 것이 아니라 중간에 섞입니다.

따라서 동일한 ID를 비교한다는 것은 API가 다른 번호의 항목을 호출하면 다른 데이터에 대한 항목을 비교한다는 것을 의미합니다.

제가 차이를 파악하고자 하는 데이터는 분 단위로 'bid', 'ask', 'Vol_Dif', 'Price_Dif'입니다.같은 '상징'의 경우가 많아서 이것과 비교할 수 없었습니다.일치하는 ID 외에 표에서 표로 항목을 비교하는 유일한 방법은 "설명" 필드를 일치시키는 것입니다.

이거 먹어봤어요.쿼리의 끝이 다음과 같다는 점을 제외하면 스크립트는 위와 거의 같습니다.

ON t2.description = t1.description

문제는 일치하는 설명 필드를 찾는 데 50,000개의 항목에 대해 3분이 걸리는 반면, 일치하는 ID를 찾는 데는 1초가 걸린다는 것입니다.

제가 하려는 일을 더 잘, 더 빨리 할 수 있는 방법이 있을까요?잘 부탁드립니다.어떤 도움이든 감사합니다.

언급URL : https://stackoverflow.com/questions/60624405/best-way-to-compare-two-tables-in-sql-by-matching-string

반응형