Як мені дізнатися, чи використовує таблиця mysql myISAM або InnoDB Engine?


85

У MySQL неможливо вказати механізм зберігання для певної бази даних, лише для окремих таблиць. Однак ви можете вказати механізм зберігання, який використовуватиметься протягом одного сеансу за допомогою:

SET storage_engine=InnoDB;

Тому вам не потрібно вказувати це для кожної таблиці.

Як мені підтвердити, якщо справді всі таблиці використовують InnoDB?


Відповіді:


134

Якщо ви використовуєте SHOW CREATE TABLE, вам доведеться проаналізувати механізм із запиту.

Вибір з бази даних INFORMATION_SCHEMA є поганою практикою, оскільки розробники залишають за собою право змінювати свою схему в будь-який час (хоча це малоймовірно).

Правильним запитом для використання є ПОКАЗАТИ СТАН ТАБЛИЦІ - ви можете отримати інформацію про всі таблиці в базі даних:

SHOW TABLE STATUS FROM `database`;

Або для конкретної таблиці:

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

Однією зі стовпців, яку ви повернете, є Engine.


+1, за винятком того, що у вас завжди є дозвіл переглядати інформаційну схему для об’єктів, на які у вас є дозвіл.
Конерак

@Konerak Ах, правда - я виправлю відповідь. Окрім того, я бачив деякі помилки, коли вибір з information_schema не працював у випадках, коли люди мали правильні дозволи.
TehShrike

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

Тільки застереження щодо того, що дані в INFORMATION_SCHEMA кешуються, тому найкраще використовувати FLUSH TABLES до заяви, яку ви надали
OMG Ponies

Це допомагає мені порахувати кількість таблиць InnoDB у БД.
Anon30,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.