mysql 테이블이 myISAM 또는 InnoDB 엔진을 사용하고 있는지 어떻게 알 수 있습니까?


86

MySQL에서는 특정 데이터베이스에 대해 단일 테이블에 대해서만 스토리지 엔진을 지정할 수있는 방법이 없습니다. 그러나 다음을 사용하여 한 세션 동안 사용할 스토리지 엔진을 지정할 수 있습니다.

SET storage_engine=InnoDB;

따라서 각 테이블에 대해 지정할 필요가 없습니다.

실제로 모든 테이블이 InnoDB를 사용하고 있는지 어떻게 확인합니까?


답변:


138

SHOW CREATE TABLE을 사용하는 경우 쿼리에서 엔진을 구문 분석해야합니다.

INFORMATION_SCHEMA 데이터베이스에서 선택하는 것은 좋지 않습니다. 개발자가 언제든지 스키마를 변경할 수있는 권한을 보유하기 때문입니다.

사용할 올바른 쿼리는 SHOW TABLE STATUS 입니다. 데이터베이스의 모든 테이블에 대한 정보를 얻을 수 있습니다.

SHOW TABLE STATUS FROM `database`;

또는 특정 테이블의 경우 :

SHOW TABLE STATUS FROM `database` LIKE 'tablename';

다시 보게 될 열 중 하나는 Engine입니다.


+1, 단, 권한이있는 개체에 대한 정보 스키마를 볼 수있는 권한이 항상 있다는 점만 다릅니다.
Konerak 2010

@Konerak 아, 충분히 사실입니다-대답을 정정하겠습니다. 제쳐두고, 사람들이 올바른 권한을 가지고있는 경우 information_schema에서 선택이 작동하지 않는 버그를 보았습니다 .
TehShrike 2010

16
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'

주의 할 점은 INFORMATION_SCHEMA의 데이터가 캐시된다는 것입니다. 따라서 제공 한 명령문 이전에 FLUSH TABLES 를 사용하는 것이 가장 좋습니다
OMG Ponies

DB에서 InnoDB 테이블 수를 계산하는 데 도움이됩니다.
Anon30

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.