source

사용된 인덱스 콜룬 목록(mysql/mariadb)

goodcode 2023. 1. 9. 21:35
반응형

사용된 인덱스 콜룬 목록(mysql/mariadb)

EXPLAIN에 키 길이만 나타냅니다.

예를 들어 다음과 같습니다.

테이블 위에 복잡한 색인이 있습니다.

IDX_KEY (col1, col2, col3)(모든 열이 정수 유형이라고 가정합니다.)

키 길이 ("최소" 출력에서) = 4이면col1IDX_KEYindex는 쿼리에서 사용됩니다.

8이면col1그리고.col2.

12인 경우 인덱스의 모든 열이 사용됩니다.

질문: 열 목록을 계산하지 않고 결정할 수 있는 방법이 있습니까?

업데이트:

실제 테이블에는 많은 필드 및 인덱스가 있습니다.단, 예를 들어 다음과 같은 정의를 내립니다.CREATE TABLE `tbl` (`col1` unsigned int not null,`col2` unsigned int not null,`col3` unsigned int not null, primary key (`col1`,`col2`,`col2`));

그런 다음 다음과 같이 설명할 수 있습니다(인덱스에서 열을 하나만 사용하는 경우).

"id"  "select_type"  "table"  "type"   "possible_keys"  "key"      "key_len"  "ref"  "rows"  "Extra"
"1"   "PRIMARY"      "tbl"    "range"  "PRIMARY"        "PRIMARY"  "4"        \N     "1"     ""

사용하는 스토리지 엔진 및 MariaDB 버전에 따라 다르므로 키 길이에 의존하는 것은 의미가 없습니다.현재 MariaDB 버전(10.5)과 InnoDB에서는 키 길이는 4가 아니라 5입니다.

Optimizer에서 자세한 정보를 얻으려면 Analyze 명령을 사용해야 합니다.이 기능을 FORMAT=JSON(MariaDB 10.1부터 사용 가능)과 함께 사용하면 사용된 키를 포함하여 몇 가지 세부 정보를 얻을 수 있습니다.

MariaDB [test]> analyze format=JSON select col1,col2,col3 from t2 where col1=1 and col2=2 \G
*************************** 1. row ***************************
ANALYZE: {
  "query_block": {
    "select_id": 1,
    "r_loops": 1,
    "r_total_time_ms": 0.082303568,
    "table": {
      "table_name": "t2",
      "access_type": "ref",
      "possible_keys": ["col1"],
      "key": "col1",
      "key_length": "10",
      "used_key_parts": ["col1", "col2"],
      "ref": ["const", "const"],
      "r_loops": 1,
      "rows": 1,
      "r_rows": 1,
      "r_table_time_ms": 0.027733218,
      "r_other_time_ms": 0.041487106,
      "filtered": 100,
      "r_filtered": 100,
      "using_index": true
    }
  }
}
1 row in set (0.001 sec)

부록:Rick James의 코멘트를 못 봤는데EXPLAIN FORMAT=JSON는 동작합니다.사용한 키만 필요한 경우 이 명령을 사용해야 합니다.

언급URL : https://stackoverflow.com/questions/64098821/list-of-used-index-coluns-mysql-mariadb

반응형