Free tutorials & notes in Hindi & English · Clean code examples · Mobile friendly learning
MySQL + SQL · Lesson 111

InnoDB vs MyISAM Storage Engines

MySQL Storage Engine क्या करता है?

Storage engine rows/indexes, locking, transactions और recovery implement करता है। Live server check करें:

SHOW ENGINES;
SELECT @@default_storage_engine;
SELECT TABLE_SCHEMA,TABLE_NAME,ENGINE
FROM information_schema.TABLES
WHERE TABLE_SCHEMA='school_app';

MySQL 8.4 में InnoDB default/general-purpose engine है। MyISAM specialized cases के लिए है, nontransactional और table-locking engine है।

Rule: correctness, durability और measured workload से चुनें—“हमेशा fast” folklore से नहीं।

InnoDB vs MyISAM Comparison

CapabilityInnoDBMyISAM
TransactionsCOMMIT/ROLLBACKNo
Crash recoveryTransactionalCheck/repair लग सकता है
LockingRow-levelTable-level
MVCCYesNo
Foreign keysEnforcedNo
Clustered PKYesNo
FULLTEXTYesYes
FitConcurrent app dataSpecial read-mostly legacy

Both B-tree/FULLTEXT support करते हैं; MyISAM-only पुराने claims outdated हैं।

Transaction और Rollback Lab

CREATE TABLE engine_innodb_lab (
 id INT PRIMARY KEY,note VARCHAR(50)
) ENGINE=InnoDB;
CREATE TABLE engine_myisam_lab (
 id INT PRIMARY KEY,note VARCHAR(50)
) ENGINE=MyISAM;
START TRANSACTION;
INSERT INTO engine_innodb_lab VALUES(1,'temporary');
INSERT INTO engine_myisam_lab VALUES(1,'temporary');
ROLLBACK;
SELECT COUNT(*) FROM engine_innodb_lab;
SELECT COUNT(*) FROM engine_myisam_lab;
InnoDB: 0 MyISAM: 1

Rollback InnoDB insert undo करता है, MyISAM नहीं। Mixed-engine business operation partial हो सकता है।

Keys और Data Integrity

CREATE TABLE departments(
 department_id INT PRIMARY KEY,name VARCHAR(80) NOT NULL
) ENGINE=InnoDB;
CREATE TABLE students_engine_lab(
 student_id INT PRIMARY KEY,department_id INT NOT NULL,
 name VARCHAR(80) NOT NULL,
 CONSTRAINT fk_student_department FOREIGN KEY(department_id)
 REFERENCES departments(department_id)
) ENGINE=InnoDB;

InnoDB child/parent relationship enforce करता है; MyISAM नहीं। App checks races/bypass से fail हो सकते हैं। Short stable primary key और FK/query columns indexes रखें। Constraints validation/authorization replace नहीं करते।

Locking और Concurrency

InnoDB writes में matching index records lock और MVCC consistent reads देता है। MyISAM write table locks contention में sessions queue कर सकते हैं।

START TRANSACTION;
SELECT * FROM students_engine_lab
WHERE student_id=101 FOR UPDATE;
COMMIT;
  • Transactions short रखें।
  • Predicates index करें।
  • Deadlock पर whole transaction safe retry करें।
  • Performance Schema/InnoDB status monitor करें।
  • Metadata locks दोनों engines पर DDL रोक सकते हैं।

Row locks concurrency improve करते हैं, हर query की speed guarantee नहीं।

Durability, Repair और Backup

InnoDB redo/undo और crash recovery use करता है; durability configuration/storage पर भी निर्भर है। Speed के लिए log settings RPO analysis बिना न बदलें। MyISAM crash पर CHECK/REPAIR या offline myisamchk माँग सकता है; repair backup नहीं और loss possible है।

  • Engine-aware consistent backup।
  • PITR के लिए binary logs।
  • Isolated restore और totals verify।
  • Live table files casually copy न करें।

backup guide पढ़ें।

Workload के अनुसार Engine चुनें

Orders, fees, attendance, marks, users, relationships और concurrent web data में InnoDB चुनें।

MyISAM केवल reviewed nontransactional read-mostly/legacy case में, जब measured benefit हो और table locks/no FK/failure model acceptable हों। अक्सर InnoDB summary/cache/analytics बेहतर है।

  1. Correctness और RPO/RTO तय करें।
  2. Representative concurrent benchmark।
  3. Latency, throughput, waits, CPU/I/O, recovery measure।
  4. Failures भी test करें।
  5. Per-table decision document करें।

MyISAM को InnoDB Safely Convert करें

SELECT TABLE_NAME,ENGINE,TABLE_ROWS,DATA_LENGTH,INDEX_LENGTH
FROM information_schema.TABLES
WHERE TABLE_SCHEMA='school_app' AND ENGINE='MyISAM';
ALTER TABLE school_app.legacy_table ENGINE=InnoDB;
SHOW CREATE TABLE school_app.legacy_table;

पहले tested backup, version/features, disk, PK, duplicates/orphans, FULLTEXT/index, app assumptions, downtime और replication impact जाँचें। बाद में counts/totals, FKs, query plans, concurrency, errors/latency और restore test करें। Blind bulk conversion न करें; rollback/cutover plan रखें।

Official संदर्भ

Default, transactions, locking, foreign keys और recovery official MySQL 8.4 manual से verified हैं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

MySQL 8.4 का default storage engine कौन-सा है?
InnoDB default है। ENGINE clause के बिना CREATE TABLE normally InnoDB बनाता है, जब तक server default deliberately change न हो।
क्या MyISAM transactions और rollback support करता है?
नहीं। MyISAM nontransactional है, इसलिए ROLLBACK उसके changes undo नहीं करता। Transactional tables के साथ mix करने पर partial operation हो सकता है।
क्या MyISAM foreign keys enforce करता है?
नहीं। InnoDB foreign-key constraints enforce करता है। Unsupported engine foreign-key syntax parse कर सकता है पर referential enforcement नहीं देता।
क्या MyISAM हमेशा InnoDB से fast है?
नहीं। Performance reads, writes, concurrency, indexes, size, durability और configuration पर निर्भर है। Real workload benchmark करें; application data में InnoDB सामान्य default है।
MyISAM table को InnoDB कैसे convert करें?
Compatibility, space, backup, duplicates/orphans और downtime/online-DDL behavior जाँचकर ALTER TABLE table_name ENGINE=InnoDB चलाएँ; फिर schema, counts, constraints, queries और recovery validate करें।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.