복붙노트

[SQL] 계획을 설명 MySQL의에서 "멀리 최적화 된 선택 테이블"의 의미

SQL

계획을 설명 MySQL의에서 "멀리 최적화 된 선택 테이블"의 의미

계획을 설명 MySQL을 멀리 최적화 된 선택 테이블의 의미는 무엇입니까?

explain select count(comment_count) from wp_posts;

+----+-------------+---------------------------+-----------------------------+
| id | select_type | table,type,possible_keys, | Extra                       |
|    |             | key,key_len,ref,rows      |                             |
+----+-------------+---------------------------+-----------------------------+
| 1  | SIMPLE      | all NULLs                 | Select tables optimized away| 
+----+-------------+---------------------------+-----------------------------+
1 row in set (0.00 sec)

참고 : 읽기 쉽게 편집 계획 출력을 설명합니다.

해결법

  1. ==============================

    1.그것은 당신이 더 테이블의 행 수를 계산보다는 아무것도하지 않는 쿼리를 수행 한 의미하며, 그 테이블은 MyISAM 테이블입니다. MyISAM 테이블은 너무 MySQL은 모두 한 테이블 행 데이터의 볼 필요하지 않습니다이 쿼리를 수행하기 위해 별도의 행 수를 함께 저장됩니다. 대신 즉시 미리 계산 된 행 수를 반환합니다. 따라서 테이블 액세스는 '멀리 최적화'하고 쿼리 번개 빠릅니다.

    그것은 당신이 더 테이블의 행 수를 계산보다는 아무것도하지 않는 쿼리를 수행 한 의미하며, 그 테이블은 MyISAM 테이블입니다. MyISAM 테이블은 너무 MySQL은 모두 한 테이블 행 데이터의 볼 필요하지 않습니다이 쿼리를 수행하기 위해 별도의 행 수를 함께 저장됩니다. 대신 즉시 미리 계산 된 행 수를 반환합니다. 따라서 테이블 액세스는 '멀리 최적화'하고 쿼리 번개 빠릅니다.

    동일은 이노로 MySQL에서 다른 스토리지 엔진에서 발생하지 않습니다. 하지만 실제로는, 당신은 다른 여러 가지 이유로 대부분의 경우 이노와하지의 MyISAM을 사용하여 싶어요. (그리고 심지어 행 수를 최적화하지 않고 쿼리의 종류는 매우, 매우 빠릅니다.)

    select count(comment_count) from wp_posts;
    

    당신은 정말로 의미하는 것이 무엇입니까? 그건 그냥 SELECT COUNT와 같은의 (*) ... (COMMENT_COUNT를 가정하는 것은 그것이 될 수 없거나 최적화를 가지고 있지 것이다, NULL 일 수 없습니다). 당신이 원하는 경우 COMMENT_COUNT의 총은 SUM (COMMENT_COUNT)를 사용한다이야, 당신은 '멀리 최적화 된 행동을받지 않습니다.

  2. ==============================

    2.MySQL의 문서에서 :

    MySQL의 문서에서 :

    기본적으로이 MySQL로 제공됩니다 쿼리가 사용하는 데이터를 의미하며, 쿼리가 일정 시간에 실행됩니다.

  3. ==============================

    3.이는 테이블이 완전히 쿼리 밖으로 최적화되어 의미합니다. 당신은 그것보다 더 나은 얻을 수 없습니다.

    이는 테이블이 완전히 쿼리 밖으로 최적화되어 의미합니다. 당신은 그것보다 더 나은 얻을 수 없습니다.

  4. ==============================

    4.허용 대답 가장 upvoted 대답은 설명이 유형은 MyISAM 테이블에 적용하는 것이 좋습니다 것 같다. 그러나 나는 InnoDB의 테이블과이를보고하고있다.

    허용 대답 가장 upvoted 대답은 설명이 유형은 MyISAM 테이블에 적용하는 것이 좋습니다 것 같다. 그러나 나는 InnoDB의 테이블과이를보고하고있다.

    나는 버전 5.6 여기 MySQL의 문서를보고, https://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_extra

    나는 설명이의 MyISAM로 제한되어 있음을 볼 수 없습니다. 그러나 COUNT (*)의 특정 케이스, 설명이 유형의 테이블 인의 MyISAM의 경우에 유효 될 것이라고 말한다 메모가있다.

    '(이노을 등의 MyISAM과 같은,하지만) 테이블 당 정확한 행 개수를 유지 스토리지 엔진의 경우,이 여분의 값은 COUNT 발생할 수 있습니다 (*) 쿼리하는 WHERE 절가 없거나 항상 진실하고 더 GROUP BY 절 없다 . (이는 스토리지 엔진 영향 행의 결정 수가 판독 할 수 있는지 여부를 내재적으로 그룹화 쿼리의 인스턴스이다.) '

  5. ==============================

    5.InnoDB의 테이블의 나는 분 또는 AUTO_INCREMENT이있는 열의 최대을 찾고 때 "멀리 최적화 된 선택 테이블"을 보았다. 거기 단지 모양의 최적화를 위해 쉽게 사용자 테이블을 접촉하지 않도록 INFORMATION_SCHEMA.TABLES은 최대 AUTO_INCREMENT를 유지합니다. 최적화가 대답을 사용자 테이블로 이동해야하므로 차이가있을 수 있기 때문에 그것은 카운트 같은 것들에 대해 작동하지 않습니다.

    InnoDB의 테이블의 나는 분 또는 AUTO_INCREMENT이있는 열의 최대을 찾고 때 "멀리 최적화 된 선택 테이블"을 보았다. 거기 단지 모양의 최적화를 위해 쉽게 사용자 테이블을 접촉하지 않도록 INFORMATION_SCHEMA.TABLES은 최대 AUTO_INCREMENT를 유지합니다. 최적화가 대답을 사용자 테이블로 이동해야하므로 차이가있을 수 있기 때문에 그것은 카운트 같은 것들에 대해 작동하지 않습니다.

  6. ==============================

    6.하드 검색어를 보지 않고 대답,하지만 당신은 예를 들어 상수 값을 선택한 경우이는 결과가 될 것입니다 -

    하드 검색어를 보지 않고 대답,하지만 당신은 예를 들어 상수 값을 선택한 경우이는 결과가 될 것입니다 -

    테이블에서 하나를 선택

    또는 테이블 중 하나 이상이 질문에 대답 할 필요가 없습니다.

  7. from https://stackoverflow.com/questions/1992312/meaning-of-select-tables-optimized-away-in-mysql-explain-plan by cc-by-sa and MIT license