💯 Coding Test

[LeetCode] Delete Duplicate Emails

date
Jul 14, 2023
slug
leetcode196
author
status
Public
tags
SQL
summary
DELETE
type
Post
thumbnail
updatedAt
Jul 15, 2023 12:08 AM
category
💯 Coding Test

[문제 링크]

[풀이 코드]

☑️
중복된 이메일은 모두 삭제하고 아이디가 가장 작은 고유 이메일 하나만 남겨둡니다. (SQL 사용자의 경우 SELECT 문이 아닌 DELETE 문을 작성해야 한다는 점에 유의하세요.)

1. 단순한 방법

문제에서 DELETE문을 사용하라고 명시되어 있다.
DELETE문은 SQLD에서 간단하게 공부만 하고 코드로 실행해 본 적이 없어서 이 링크를 참고해 풀었다.
notion image
DELETE P FROM Person P, Person T WHERE P.id > T.id AND P.email = T.email
☑️
테이블이 두 개 이상일 때는 DELETE 뒤에 삭제할 테이블 작성 필요
문제는 실행시간이 너무 길다ㅜㅜ
notion image
notion image

2. JOIN

그래서 JOIN을 사용해 봤다.
DELETE P FROM Person P JOIN Person T ON P.email = T.email WHERE P.id > T.id
notion image
notion image
훨씬 좋아진 Runtime…
 
그리고 Solution에 코드 여러 개 가져와서 실행해 봤는데

3. 너무 느린 예

DELETE P FROM Person P JOIN Person T ON P.email = T.email AND P.id > T.id
notion image
notion image
JOIN ON AND 형식은 처음 봤다.
이렇게도 사용할 수 있구나. 그런데 결과는 좋지 않다.
조건은 WHERE절에 쓰도록 하자..

4. 서브쿼리

제목이 “FASTEST SOLUTION !! BEST TIME COMPLEXITY!!” 이길래 궁금해서 실행해 봤다.
DELETE FROM Person WHERE id IN (SELECT id FROM ( SELECT id,row_number() over(partition by email ORDER BY id) AS rnum FROM Person)a WHERE rnum>1);
notion image
notion image
notion image
notion image
주석을 없애니 더 빨라졌다.
 
참고로 Submit할 때마다 같은 코드여도 Runtime이 다르게 나온다.
이걸 모르고 대문자/소문자일 때 속도도 비교해 보고 주석유무의 속도도 비교해 봤는데 잘 모르겠어서 챗GPT에게 물어봤더니 영향을 줄 수 있는 경우가 있다고 한다.
💻
실제로 SQL 실행 속도에는 주석의 유무나 SQL 문의 대소문자 사용 등과 같은 요소가 미치는 영향은 매우 미미합니다. 일반적으로 DBMS는 SQL 문을 실행하기 전에 내부적으로 최적화 과정을 거치기 때문에 주석의 존재 여부나 대소문자에 대한 차이는 무시됩니다. 다만, 몇 가지 경우에는 영향을 줄 수 있습니다.
  1. 주석: 주석은 SQL 문장의 가독성과 유지보수를 위해 사용되며, SQL 엔진에서는 주석을 무시합니다. 따라서 주석이 많은 경우에는 SQL 문장 자체의 길이가 늘어날 수 있어 네트워크 전송 시간이 더 소요될 수 있습니다. 하지만 이는 주석의 양이 매우 많거나 대규모의 쿼리일 때에만 영향을 미칩니다.
  1. 대소문자: 대부분의 DBMS는 SQL 문장의 대소문자를 구별하지 않습니다. 즉, "SELECT"와 "select"는 동일한 결과를 반환하며, 실행 속도에는 영향을 미치지 않습니다. 그러나 몇몇 DBMS는 대소문자를 구별하는 설정이 가능하므로, 해당 설정에 따라 실행 속도에 약간의 차이가 있을 수 있습니다.
 
실행 속도에 더 큰 영향을 미치는 요소들은 다음과 같습니다.
 
  1. 인덱스: 적절한 인덱스의 사용 여부는 SQL 실행 속도에 큰 영향을 미칩니다. 효율적인 인덱스를 사용하면 데이터 접근 시간이 단축되어 실행 속도가 향상됩니다.
  1. 조인: 조인 연산은 데이터베이스의 성능에 큰 영향을 미치는 작업입니다. 조인 조건, 인덱스, 테이블 크기 등이 조인의 성능에 영향을 줄 수 있습니다.
  1. 데이터 볼륨: 대량의 데이터를 처리하는 쿼리는 실행 속도에 영향을 줄 수 있습니다. 데이터 양을 줄이거나 쿼리를 최적화하여 실행 속도를 개선할 수 있습니다.
  1. 데이터베이스 구조: 데이터베이스의 정규화 수준, 테이블 및 인덱스 설계, 쿼리 최적화 등의 요소는 실행 속도에 영향을 미칩니다.
  1. 하드웨어 및 서버 성능: 서버의 하드웨어 성능, 네트워크 대역폭 등도 SQL 실행 속도에 영향을 미칠 수 있습니다.
 
요약하자면, 주석 유무나 대소문자 사용은 SQL 실행 속도에 미미한 영향을 미칩니다. 인덱스, 조인, 데이터 볼륨, 데이터베이스 구조, 하드웨어 및 서버 성능 등이 더 큰 영향을 미치는 요소입니다. 따라서 실행 속도를 향상시키기 위해서는 이러한 요소들을 고려하여 최적화하는 것이 중요합니다.