[SQL] SQL은 : 레코드가 존재하는 경우 어떻게 제대로 확인
SQLSQL은 : 레코드가 존재하는 경우 어떻게 제대로 확인
내가 이것을 발견 된 일부 SQL 튜닝 문서를 읽기 :
(*) 수를 선택합니다 : - 행의 수를 계산 - 종종 잘못 기록의 존재를 확인하는 데 사용됩니다
SELECT COUNT (*) 정말 나쁜 것을인가?
기록의 존재를 확인하는 적절한 방법은 무엇입니까?
해결법
-
==============================
1.그것은 다음 중 하나를 사용하는 것이 좋습니다 :
그것은 다음 중 하나를 사용하는 것이 좋습니다 :
-- Method 1. SELECT 1 FROM table_name WHERE unique_key = value; -- Method 2. SELECT COUNT(1) FROM table_name WHERE unique_key = value;
당신에게 어떤 결과 나 하나 개의 결과를주지해야 할 첫 번째 대안은 두 번째 카운트가 0 또는 1이어야한다.
당신이 사용하고있는 문서는 몇 살입니까? 당신이 최근 RDBMS의 최적화 SELECT COUNT에 좋은 조언, 대부분의 쿼리 옵티 마이저를 읽은 있지만 이론 (이상 데이터베이스)에 차이가있는 동안 (*) 어쨌든, 그래서, 당신은 실제로 어떤 차이를 알아 채지 못합니다.
-
==============================
2.나는 전혀 카운트 기능을 사용하지 않으려는 것입니다 :
나는 전혀 카운트 기능을 사용하지 않으려는 것입니다 :
IF [NOT] EXISTS ( SELECT 1 FROM MyTable WHERE ... ) <do smth>
예를 들어, 당신은 사용자가 쿼리를 다음과 같이 할 수있는 데이터베이스에 삽입하기 전에 존재하는지 확인하려면 :
IF NOT EXISTS ( SELECT 1 FROM Users WHERE FirstName = 'John' AND LastName = 'Smith' ) BEGIN INSERT INTO Users (FirstName, LastName) VALUES ('John', 'Smith') END
-
==============================
3.당신이 사용할 수있는:
당신이 사용할 수있는:
SELECT 1 FROM MyTable WHERE <MyCondition>
조건에 일치하는 레코드가없는 경우, 결과 레코드가 비어 있습니다.
-
==============================
4.다른 답변은 아주 좋다, 그러나 또한 불필요한 행의 확인을 방지하기 위해, LIMIT 1 (또는 동등한를 추가하는 것이 유용 할 것이다.
다른 답변은 아주 좋다, 그러나 또한 불필요한 행의 확인을 방지하기 위해, LIMIT 1 (또는 동등한를 추가하는 것이 유용 할 것이다.
-
==============================
5.
SELECT COUNT(1) FROM MyTable WHERE ...
모든 레코드 통해 반복됩니다. 기록 존재를 사용하는 것이 나쁜 이유입니다.
내가 사용하는 것이
SELECT TOP 1 * FROM MyTable WHERE ...
(1 개) 기록을 발견 한 후에는 루프를 종료합니다.
-
==============================
6.당신이 사용할 수있는:
당신이 사용할 수있는:
SELECT COUNT(1) FROM MyTable WHERE ...
또는
WHERE [NOT] EXISTS ( SELECT 1 FROM MyTable WHERE ... )
당신은 단순히 모든 필드가 아닌, 각 행에 대해 1의 값을 선택하고 있기 때문에이 SELECT *보다 더 효율적입니다.
COUNT (*)와 COUNT (열 이름) 사이의 미묘한 차이도 있습니다 :
-
==============================
7.당신이 사용할 수있는:
당신이 사용할 수있는:
SELECT 1 FROM MyTable WHERE... LIMIT 1
사용 불필요한 필드의 확인을 방지하기 위해 1을 선택합니다.
사용 LIMIT 1 불필요한 행의 검사를 방지합니다.
-
==============================
8.나는이 방법을 사용하고 있습니다 :
나는이 방법을 사용하고 있습니다 :
IIF(EXISTS (SELECT TOP 1 1 FROM Users WHERE FirstName = 'John'), 1, 0) AS DoesJohnExist
-
==============================
9.기타 옵션 :
기타 옵션 :
SELECT CASE WHEN EXISTS ( SELECT 1 FROM [MyTable] AS [MyRecord]) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END
from https://stackoverflow.com/questions/4253960/sql-how-to-properly-check-if-a-record-exists by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가장 최근의 날짜를 기준으로 SQL 선택 행 (0) | 2020.04.28 |
---|---|
[SQL] 파티션 기능 COUNT () OVER 가능 DISTINCT 사용 (0) | 2020.04.28 |
[SQL] 삭제 "열이 존재하지 않습니다" (0) | 2020.04.28 |
[SQL] SQL : 어떻게 열의 각 구별 값의 수를 얻는 방법? (0) | 2020.04.28 |
[SQL] 어떤 레코드가 발견되지 않으면 값을 반환 (0) | 2020.04.28 |