programing

MySQL 설명 계획에서 "Select tables optimized away"의 의미

newsource 2022. 10. 27. 21:51

MySQL 설명 계획에서 "Select tables optimized away"의 의미

의 의미는 무엇입니까?Select tables optimized awayMySQL Expply?

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)

★★★★★★explain plan가독성을 위해 편집된 출력입니다.

MySQL 문서:

쿼리에는 인덱스 또는 MyISAM의 COUNT(*)를 사용하여 해결된 집약 함수(MIN(), MAX()만 포함되며 GROUP BY 절은 포함되지 않습니다.옵티마이저는 1개의 행만 반환해야 한다고 판단했습니다.

기본적으로 쿼리는 MySQL에서 직접 사용할 수 있는 데이터를 사용하며 쿼리는 일정한 시간 내에 실행됩니다.

즉, 테이블 내의 행 수를 카운트하는 것 이외에는 아무것도 하지 않는 쿼리를 실행했음을 의미합니다.이 테이블은 MyISAM 테이블입니다.MyISAM 테이블은 별도의 행 개수로 저장되므로 이 쿼리를 수행하기 위해 MySQL은 테이블 행 데이터를 전혀 볼 필요가 없습니다.대신 미리 계산된 행 수를 즉시 반환합니다.따라서 테이블접근은 '최적화'되어 쿼리는 고속입니다.

InnoDB와 같은 MySQL의 다른 스토리지 엔진에서는 이와 같은 현상이 발생하지 않습니다.그러나 실제로는 다른 여러 가지 이유로 MyISAM이 아닌 InnoDB를 사용하고 싶어합니다.(또한 행 수를 최적화하지 않아도 이러한 종류의 쿼리는 매우 빠릅니다.)

select count(comment_count) from wp_posts;

말말 그렇 렇려 려? ??? 그냥 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★SELECT COUNT(*)... (비밀(이행)comment_count 리가 없다NULL그렇지 않으면 최적화를 얻을 수 없습니다.)comment_count는 s를 .SUM(comment_count)을 사용법

즉, 쿼리에서 테이블이 완전히 최적화되어 있습니다.그보다 더 좋을 순 없어

승인된 답변과 가장 높은 응답은 이러한 유형의 설명이 MyISAM 테이블에만 적용됨을 시사하는 것으로 보입니다.하지만 저는 InnoDB 테이블에서 이것을 보고 있습니다.

버전 5.6의 mysql 문서를 https://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_extra에서 찾았습니다.

MyISAM에만 설명이 있는 것은 아닌 것 같습니다.다만, COUNT(*)의 경우는, MyISAM 의 테이블일 경우, 이러한 설명이 유효하게 된다고 하는 주의사항이 있습니다.

테이블당 정확한 행 수를 유지하는 스토리지 엔진(MyISAM, InnoDB 등)의 경우 WHERE 절이 없거나 항상 참이며 GROUP BY 절이 없는 COUNT(*) 쿼리에 대해 이 추가 값이 발생할 수 있습니다.(이는 암묵적으로 그룹화된 쿼리의 인스턴스이며, 스토리지 엔진이 결정론적 개수의 행을 읽을 수 있는지 여부에 영향을 미칩니다.)'

innodb 테이블의 경우 auto_increment가 있는 컬럼의 최소값 또는 최대값을 찾을 때 "Select tables optimized away"를 본 적이 있습니다.information_schema.tables는 최대 auto_increment를 유지하므로 옵티마이저는 사용자 테이블을 건드리지 않고 보기 쉽습니다.공백이 있을 수 있기 때문에 사용자 테이블로 이동하여 답을 구해야 하기 때문에 카운트에는 사용할 수 없습니다.

쿼리를 보지 않고는 말하기 어렵지만 예를 들어 상수 값을 선택한 경우 이 결과가 발생합니다.

사용 가능한 제품에서 1개 선택

또는 질문에 답변하기 위해 하나 이상의 테이블이 필요하지 않습니다.

쿼리에서 테이블이 완전히 최적화되었는지 확신할 수 없습니다.이 쿼리는 "table_name, count(id) from wm.task_inst_params;"로 'wm.task_inst_params'를 선택합니다."를 실행하는 데 18분이 걸립니다.테이블에는 224788138 행이 있습니다.

그리고 왜 이렇게 오래 걸리는지 알기 위해 설명 계획을 얻으려고 하면 "설명할 수 없는 계획: 최적화된 테이블을 선택하십시오."라는 메시지가 나타납니다.

innodb_version 8.0.11

언급URL : https://stackoverflow.com/questions/1992312/meaning-of-select-tables-optimized-away-in-mysql-explain-plan