Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[6-2장] Full scan on NULL key 에서 풀 테이블 스캔 #12

Open
pci2676 opened this issue Nov 28, 2020 · 2 comments
Open

[6-2장] Full scan on NULL key 에서 풀 테이블 스캔 #12

pci2676 opened this issue Nov 28, 2020 · 2 comments
Labels
Stuck 해결하지 못한 이슈

Comments

@pci2676
Copy link
Contributor

pci2676 commented Nov 28, 2020

p.300 Full scan on NULL key 는 MySQL이 쿼리를 실행하는 중 col1이 NULL을 만나면 예비책으로 풀 테이블 스캔을 사용할 것이라는...

질문 : 여기서 풀 테이블 스캔을 사용한다는게 정확히 무슨 의미인지 잘 와닿지가 않아. NULL을 가지고 서브 쿼리가 아닌 테이블을 풀 테이블 스캔을 한다는 건가?

@pci2676 pci2676 added this to the Real MySQL 6.2.5 - 6.2.14 milestone Nov 28, 2020
@begaonnuri
Copy link
Contributor

begaonnuri commented Nov 29, 2020

col1이 속한 테이블을 풀 테이블 스캔하는지, 아니면 서브쿼리가 속한 테이블을 풀 테이블 스캔하는지 궁금한거라고 이해했는데,
예제에 보면 SELECT절에 서브쿼리가 있어.

SELECT d.dept_no, NULL IN (SELECT id.dept_name FROM departments id)
FROM departments d;

SELECT절의 서브쿼리는 항상 스칼라값(컬럼 하나의 값)만 올 수 있어서 서브쿼리의 테이블이 곧 col1의 테이블이기 때문에 전체를 풀 테이블 스캔한다는 말 같아.

추가로 공식문서 설명을 덧 붙이면,

MySQL 공식문서
When the optimizer uses a triggered condition to create some kind of index lookup-based access (as for the first two items of the preceding list), it must have a fallback strategy for the case when the condition is turned off. This fallback strategy is always the same: Do a full table scan.

옵티마이저가 트리거 조건(col1)을 사용해 인덱스 조회 기반 액세스를 만들때, 조건이 부합 안될 경우(null) 대비책이 필요한데, 이 대비책은 항상 풀 테이블 스캔이어야 한다.

MariaDB 공식문서
The table is a part of the sub query and if the value that is used to match the sub query will be NULL, we will do a full table scan.

테이블은 서브쿼리의 일부이고, 서브쿼리와 매치되는 값이 null일 경우 풀 테이블 스캔을 할 것이다.

@begaonnuri begaonnuri added the Stuck 해결하지 못한 이슈 label Nov 30, 2020
@YebinK
Copy link
Member

YebinK commented Nov 30, 2020

인덱스 공부해서 다시 돌아오기!

@lxxjn0 lxxjn0 removed this from the Real MySQL 6.2.5 - 6.2.14 milestone Jan 31, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Stuck 해결하지 못한 이슈
Projects
None yet
Development

No branches or pull requests

4 participants