2016-11-11 10 views
4

filtered은 MySQL EXPLAIN EXTENDED의 의미에서 무엇을 의미합니까?MySQL EXPLAIN EXTENDED의 문맥에서 필터링 된 의미는 무엇입니까?

MySQL Docs 상태 :

여과 (JSON 상품명 : 여과)

여과 컬럼 테이블의 조건에 의해 필터링 될 테이블 행의 예상 비율을 나타낸다. 즉, 행은 검사 된 행 수를 나타내고 행 x 필터링 된/100은 이전 테이블과 조인 될 행 수를 표시합니다. MySQL 5.7.3 이전에는 EXPLAIN EXTENDED를 사용하면이 컬럼이 표시됩니다. MySQL 5.7.3부터 확장 출력은 기본적으로 사용 가능하며 EXTENDED 키워드는 필요하지 않습니다.

하지만 아직 실마리가 없습니다. 예를 들어 100.00은 의미가 있습니까? 43.61이 있다면 무엇을 의미합니까? 더 낫니? 보다 나쁜? 나는 100.00을 가지고 가려고해야합니까?

단지 정보 목적 일 뿐인가요? 다른 키에 조인하는 두 개의 유사한 쿼리가 있지만 SQL ER 구조 및 비즈니스 논리를 기반으로 동일한 행과 값을 생성한다고 가정 해보십시오. 한 쿼리는 모든 조인에 대해 100.00을보고하고 다른 쿼리는 조인 중 하나에 대해 43.61, 다른 조인에 대해 100.00을 말합니다. 이 번호로 배울 점은 무엇입니까?

예 : 또한

+-------------+-------+--------+---------+---------+------+----------+ 
| select_type | table | type | key  | key_len | rows | filtered | 
+-------------+-------+--------+---------+---------+------+----------+ 
| PRIMARY  | job | range | status | 122  | 512 | 100.00 | 
| PRIMARY  | user | eq_ref | PRIMARY | 4  | 1 | 100.00 | 
| PRIMARY  | item | eq_ref | PRIMARY | 4  | 1 | -> 43.61 | <-- 
+-------------+-------+--------+---------+---------+------+----------+ 

우리는 함께 작동하도록 쿼리가없는

https://dba.stackexchange.com/a/164360

+0

완전히베이스가 아닐 수 있지만 'filtered'값이 좋음/나쁨의 한정자이지만 단순히 쿼리가 수행하는 것의 추가 측정 항목 일뿐입니다. –

+0

'필터링 된'은 100-43.61 = 56.39 % 행을 "버렸다"는 것을 의미하는 것으로 이해한다면, 논리가 무엇이든간에 56.39 %의 행을 검토하지 않았 음을 의미합니다. 이 경우 더 효율적인 행을 찾기 위해 데이터베이스에 적은 행을 조사하길 원합니다. 100.00은 "모든 행을 살펴 봐야"하고 "필터"하거나 버릴 수 없음을 의미합니다. 아마도? – Dennis

+0

나는 그것이'WHERE' 조건 때문이라고 생각하기 시작했다. 질의는'WHERE' 절을보고 일치하지 않는 행을 버린다. 나는 그것이 적용되지 않는 행들을 걸러내는 것을 의미한다고 생각한다. 그래서 43.61은'WHERE' 절에 근거하여 많은 행을 백분율로 버렸음을 의미 할 수 있습니다. 다시, 어쩌면. – Dennis

답변

0

보고,이 정말이에 대한 권리 포럼되지 않습니다 질문에 답할 수 있지만 가능한 경우 질문에 대답하기 위해 필터링을 통해 100 %의 행을 반환해야합니다. 물론 매뉴얼을 보면 mysql의 버전에 따라 필터링 된 숫자가 100보다 클 수 있으므로 그 경우에는 비율과 비슷합니다.

초기 '범위'최적화에서 작업 인덱스가 사용 된 경우 필터링 된 행이 없습니다. 색인이 색인을 완전히 덮었 기 때문에 최적의 결과를 얻었으며 결과 데이터를 줄일 필요가 없었습니다.

2 단계에서 이러한 작업이 사용자에게 연결되었습니다. 일치하는 사용자는 1 명 뿐이므로 중간 결과는 사용자 1 명 * 512 명입니다.

항목 테이블에 조인 할 마지막 조인 (eq_ref)에는 해당 항목 행이 1 개 있습니다. 그러나 이제 일부 필터링이 적용되고 1x512 행 중 43 % 만 궁극적으로 반환됩니다. 오버 헤드를 감당할만한 가치는 없을 지 모르지만 인덱스를 사용하면이 기능을 향상시킬 수 있습니다.

이것은 작은 결과 집합이므로 큰 문제는 아니지만, mysql이 512 행을 거쳐 필터링을 통해 추가 감소를해야한다는 것을 알려주는 내용입니다.

다시 말하면 데이터의 특정 이해와 말하기는 어렵지만 추가적인 통찰력을 얻는 데 도움이되는 팁을 줄 수 있습니다. format = json 매개 변수를 사용하면 몇 가지 추가 정보가 표시됩니다. 정보, 특히 rows_examined_per_scan 및 rows_produced_per_join.당신이 더 그것을 탐구하고자하는 경우 해당 데이터로 질문을 업데이트 할 수

explain format=json <your query> 

을뿐만 아니라 쿼리 도움이 될 것입니다 :

특히이를 시도해야합니다.