InnoDB සහ MyISAM අතර ඇති ප්‍රධාන වෙනස්කම් මොනවාද?


256

InnoDB සහ MyISAM අතර ඇති ප්‍රධාන වෙනස්කම් මොනවාද?


24
ඔබට දත්ත සමුදා එන්ජිමක් අවශ්‍ය නම්, InnoDB භාවිතා කරන්න. ඔබට මේ දෙක සංසන්දනය කළ නොහැක .
ජෙරමි ස්ටයින්

පහත දැක්වෙන පිළිතුරු බොහොමයක් නිවැරදි වුවත්, ඒවා පැහැදිලිව තම්බා නොගනී, IMHO. මෙම වෙබ් අඩවිය සිදු කරන අතර ප්‍රධාන කරුණ වන්නේ InnoDB යනු පේළි මට්ටමේ අගුලු දැමීමයි, MyISAM යනු වගු මට්ටමේ අගුලු දැමීමයි. මෙයින් අදහස් කරන්නේ, පොදුවේ ගත් කල, මයිසාම් OLAP සඳහා වඩා හොඳ වනු ඇත (විශ්ලේෂණ, වැඩි වශයෙන් කියවන) සහ InnoDB OLTP සඳහා වඩා හොඳ වනු ඇත (ගනුදෙනු, බොහෝ දුරට ලියයි, හෝ අවම වශයෙන් බොහෝ ලිවීම්).
මයික් විලියම්සන්

Answers:


165

මා දකින පළමු ප්‍රධාන වෙනස නම් InnoDB පේළි මට්ටමේ අගුල ක්‍රියාත්මක කරන අතර MyISAM හට කළ හැක්කේ මේස මට්ටමේ අගුලක් පමණි. InnoDB හි වඩා හොඳ බිඳවැටීම් ප්‍රතිසාධනය ඔබට සොයාගත හැකිය. කෙසේ වෙතත්, FULLTEXTMyISAM මෙන් v5.6 වන තෙක් එයට සෙවුම් දර්ශක නොමැත. InnoDB ගනුදෙනු, විදේශීය යතුරු සහ සම්බන්ධතා අවහිරතා ද ක්‍රියාත්මක කරන අතර MyISAM එසේ නොකරයි.

ලැයිස්තුවට තව ටිකක් ඉදිරියට යා හැකිය. එහෙත්, ඔවුන් දෙදෙනාම ඔවුන්ගේ වාසි සහ එකිනෙකාට එරෙහි අවාසි වල සුවිශේෂී වාසි ඇත. ඒ සෑම එකක්ම අනෙක් අවස්ථා වලට වඩා සමහර අවස්ථා වලදී වඩාත් සුදුසු වේ.

එබැවින් සාරාංශ කිරීමට ( TL; DR ):

  • InnoDB හි පේළි මට්ටමේ අගුලු දැමීමක් ඇත, MyISAM හට කළ හැක්කේ සම්පූර්ණ වගු මට්ටමේ අගුලු දැමීම පමණි.
  • InnoDB වඩා හොඳ බිඳවැටීම් ප්‍රකෘතියක් ඇත.
  • MyISAM සතුව FULLTEXTසෙවුම් දර්ශක ඇත, InnoDB MySQL 5.6 (2013 පෙබරවාරි) තෙක් නොතිබුණි.
  • InnoDB ගනුදෙනු, විදේශීය යතුරු සහ සම්බන්ධතා අවහිරතා ක්‍රියාත්මක කරයි, MyISAM එසේ නොකරයි.

ආදරණීය සර්, ඉතින් අවසානයේ යමෙක් භාවිතා කරන්නේ කුමක් ද? MyISAM හෝ InnoDB? මුළුමනින්ම ව්‍යාකූල වී ඇත ... මගේ වෙබ් අඩවිය mysql භාවිතා කරන අතර මට මෙය තීරණය කළ යුතුය.
sqlchild

3
යෙදුම මත රඳා පවතී, ඔබට අවශ්‍ය අංග සහිත ලැයිස්තුවක් ලියන්න (උදා: සම්පූර්ණ පෙළ සෙවීම, විදේශීය යතුරු ...) සහ එකක් තීරණය කිරීමට උත්සාහ කරන්න (එක් එක් අංගය ඇගයීමට උත්සාහ කර ලකුණු ගණනය කරන්න). ඔබට ඒවා සියල්ලම ලබා ගත නොහැකි නමුත් මායාකාරියගේ අංගය වැඩිපුරම අවශ්‍ය බව තීරණය කිරීම ඔබ සතුය.
poelinca

2
පැහැදිලි කිරීම සඳහා මම ඔහුගේ ලිපිය සංස්කරණය කළෙමි.
මතියස් ලිකෙගාඩ් ලොරෙන්සන්

1
@ මතියස් ලයික්ගාගාඩ් ලොරෙන්සන් ස්තූතියි, අපි කොටස් හුවමාරුවට කැමති එක් හේතුවක් එයයි
poelinca

වන විට version 5.6.4InnoDB සහය FULLTEXTසෙවීම. dev.mysql.com/doc/refman/5.6/en/fulltext-restrictions.html
daydreamer

89

තවම සඳහන් කර නොමැති තවත් ප්‍රධාන වෙනසක් වන්නේ එක් එක් ගබඩා එන්ජිම සඳහා හැඹිලිගත කරන්නේ කෙසේද යන්නයි.

මයිසම්

භාවිතා කරන ප්රධාන යාන්ත්රණය යතුරු හැඹිලියයි. එය හැඹිලි .MYI ගොනු වලින් දර්ශක පිටු පමණක් රඳවා ගනී. ඔබගේ යතුරු හැඹිලිය විශාල කිරීමට, පහත විමසුම ක්‍රියාත්මක කරන්න:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

මෙය ඔබගේ වර්තමාන දත්ත කට්ටලය අනුව MyISAM යතුරු හැඹිලිය සඳහා නිර්දේශිත සැකසුම ( key_buffer_size ) ලබා දෙනු ඇත ( විමසුම මඟින් 4G (4096M) හි නිර්දේශය ලබා දෙනු ඇත. 32-බිට් මෙහෙයුම් පද්ධතිය සඳහා 4GB යනු සීමාවයි. 64-බිට්, 8GB සඳහා.

InnoDB

භාවිතා කරන ප්‍රධාන යාන්ත්‍රණය වන්නේ InnoDB ස්වාරක්ෂක තටාකයයි. එය ප්‍රවේශ වූ InnoDB වගු වලින් දත්ත සහ දර්ශක පිටු රඳවා ගනී. ඔබගේ InnoDB ස්වාරක්ෂක තටාකය විශාල කිරීමට, පහත විමසුම ක්‍රියාත්මක කරන්න:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

මෙය ඔබගේ වර්තමාන දත්ත කට්ටලය අනුව InnoDB ස්වාරක්ෂක තටාකයේ ( innodb_buffer_pool_size ) ප්‍රමාණය සඳහා නිර්දේශිත සැකසුම ලබා දෙනු ඇත.

InnoDB ලොග් ගොනු (ib_logfile0 සහ ib_logfile1) ප්‍රමාණය වෙනස් කිරීමට අමතක නොකරන්න. MySQL ප්‍රභව කේතය සියලුම InnoDB ලොග් ලිපිගොනු වල සංයුක්ත ප්‍රමාණයේ තොප්පිය <4G (4096M) විය යුතුය. ලොග් ලිපිගොනු දෙකක් පමණක් ලබා දී ඇති සරල බව සඳහා, ඔබට ඒවා ප්‍රමාණය කළ හැකි ආකාරය මෙන්න:

  • පියවර 1) /etc/my.cnf වෙත innodb_log_file_size = NNN එක් කරන්න (NNN innodb_buffer_pool_size හෝ 2547M වලින් 25% ක් විය යුතුය, එය කුඩා වුවත්)
  • පියවර 2) service mysql stop
  • පියවර 3) rm /var/log/mysql/ib_logfile[01]
  • පියවර 4) service mysql start(ib_logfile0 සහ ib_logfile1 ප්‍රතිනිර්මාණය කර ඇත)

අවවාදය

විමසුම් දෙකම අවසානයේ ක පේළිගත විමසුම් ය (SELECT 2 PowerOf1024)බී

  • (SELECT 0 PowerOf1024) බයිට් වල සැකසුම ලබා දෙයි
  • (SELECT 1 PowerOf1024) කිලෝබයිට් වල සැකසුම ලබා දෙයි
  • (SELECT 2 PowerOf1024) මෙගාබයිට් වල සැකසුම ලබා දෙයි
  • (SELECT 3 PowerOf1024) ගිගාබයිට් වල සැකසුම ලබා දෙයි
  • 0 ට වඩා අඩු හෝ 3 ට වඩා වැඩි බලයක් පිළිගනු නොලැබේ

එපිලොග්

සාමාන්‍ය බුද්ධියට ආදේශකයක් නැත. ඔබට සීමිත මතකයක්, ගබඩා එන්ජින් මිශ්‍රණයක් හෝ එහි සංයෝජනයක් තිබේ නම්, ඔබට විවිධ අවස්ථා සඳහා හැඩගැසීමට සිදුවේ.

  • ඔබට 2GB RAM සහ 16GB InnoDB තිබේ නම්, 512M innodb_buffer_pool ලෙස වෙන් කරන්න.
  • ඔබට 2GB RAM සහ 4GB MyISAM දර්ශක තිබේ නම්, key_buffer_size ලෙස 512M වෙන් කරන්න.
  • ඔබට 2GB RAM සහ 4GB MyISAM දර්ශක සහ 16GB InnoDB තිබේ නම්, 512M key_buffer_size ලෙසත් 512M innodb_buffer_pool_size ලෙසත් වෙන් කරන්න.

විය හැකි අවස්ථා නිමක් නැත !!!

මතක තබා ගන්න, ඔබ කුමක් වෙන් කළත්, ඩීබී සම්බන්ධතා සහ මෙහෙයුම් පද්ධතිය සඳහා ප්‍රමාණවත් RAM ප්‍රමාණයක් තබන්න.


ඒවා නරක සූත්‍ර!
රික් ජේම්ස්

(අපොයි - ඡේද තිබිය නොහැකි බව අමතක කරන්න) ... මම "පිළිතුරක්" එක් කරමි.
රික් ජේම්ස්

හැඹිලි ප්‍රමාණ සඳහා රෝලන්ඩෝගේ සූත්‍ර ප්‍රායෝගික නොවේ. - 2 බලයන් අවශ්‍ය නොවේ. 32-බිට් 32 මෙහෙයුම් පද්ධතියක 4GB කළ නොහැකි ය - ආදිය. ඒවා සැකසිය යුත්තේ කුමක් ද යන්න පිළිබඳ මගේ අඩුපාඩුව මෙන්න : mysql.rjweb.org/doc.php/memory (එය මතක භාවිතයට බලපාන වෙනත් විවිධ සැකසුම් ආමන්ත්‍රණය කරයි.)
රික් ජේම්ස්

3
Ick රික්: 2 හි බලයන් විවිධ ඒකකවල පිළිතුරු පෙන්වීමට අදහස් කරන ලදී. කිරීම (SELECT 2 PowerOfTwo) MB හි පිළිතුර පෙන්වීම සකසයි. කිරීම (SELECT 3 PowerOfTwo) GB හි දර්ශනය සකසයි. (SELECT 1 PowerOfTwo) KB හි දර්ශනය වේ. (SELECT 0 PowerOfTwo) බයිට් වල පෙන්වයි. (SELECT 2 PowerOfTwo) කරන්නේ එයයි. එබැවින් එය පමණක් ප්‍රදර්ශනය කිරීම අවශ්‍ය වේ, ගෘහ නිර්මාණ ශිල්පය තුළ උපකල්පිත අගයන් පැනවීම නොවේ.
RolandoMySQLDBA

3
Ick රික්: ඔයා දන්නවද මොකක්ද? ඉතා විශාල හේතු දෙකක් නිසා මම ඔබට +1 ලබා දෙන්නෙමි. 1) key_buffer_size වෙත පැවරිය හැකි විශාලතම අංකය 4GB බව මගේ පිළිතුර නිවැරදි බව ඔබගේ URL තහවුරු කරයි. 2) ඔබගේ පිළිතුර, ඔබේ URL සමඟ යන්ත්‍ර සඳහා ඉතා අඩු මතකයක් ඇති කරයි. ණය ගෙවිය යුතු තැන මම ණය දෙන්නෙමි.
RolandoMySQLDBA

63

InnoDB පිරිනැමීම්:

  • ACID ගනුදෙනු
  • පේළි මට්ටමේ අගුලු දැමීම
  • විදේශීය යතුරු අවහිරතා
  • ස්වයංක්‍රීය බිඳවැටීම් ප්‍රතිසාධනය
  • වගු සම්පීඩනය (කියවීම / ලිවීම)
  • අවකාශීය දත්ත වර්ග (අවකාශීය දර්ශක නොමැත)

InnoDB හි TEXT සහ BLOB හැර අනෙක් සියලුම දත්ත වලට උපරිම වශයෙන් බයිට් 8,000 ක් ලබා ගත හැකිය. MySQL 5.6 (2013 පෙබරවාරි) තෙක් සම්පූර්ණ පෙළ සුචිගත කිරීම InnoDB හි නොමැත. InnoDB දී COUNT(*)s (විට WHERE, GROUP BYහෝ JOINපේළිය ගණන් අභ්යන්තර ගබඩා නොවන නිසා භාවිතා නොවේ) MyISAM වඩා මන්දගාමී ක්රියාත්මක කිරීම. InnoDB දත්ත සහ දර්ශක දෙකම එක් ගොනුවක ගබඩා කරයි. InnoDB දත්ත සහ දර්ශක යන දෙකම හැඹිලි කිරීමට ස්වාරක්ෂක තටාකයක් භාවිතා කරයි.

MyISAM ඉදිරිපත් කරයි:

  • වේගයෙන් COUNT(*)s (විට WHERE, GROUP BYහෝ JOINභාවිතා නොවේ)
  • සම්පූර්ණ පෙළ සුචිගත කිරීම (යාවත්කාලීන කිරීම: MySQL 5.6 වෙතින් InnoDB හි සහය දක්වයි)
  • කුඩා තැටි පා සටහන
  • ඉතා ඉහළ වගු සම්පීඩනය (කියවීමට පමණි)
  • අවකාශීය දත්ත වර්ග සහ දර්ශක (R-tree) (යාවත්කාලීන කිරීම: MySQL 5.7 වෙතින් InnoDB හි සහය දක්වයි)

MyISAM සතුව වගු මට්ටමේ අගුලු ඇත, නමුත් පේළි මට්ටමේ අගුළු නොමැත. ගනුදෙනු නොමැත. ස්වයංක්‍රීය බිඳවැටීම් ප්‍රතිසාධනයක් නොමැත, නමුත් එය අළුත්වැඩියා වගු ක්‍රියාකාරිත්වය සපයයි. විදේශීය යතුරු අවහිරතා නොමැත. InnoDB වගු හා සසඳන විට MyISAM වගු සාමාන්‍යයෙන් තැටියේ ප්‍රමාණයට වඩා සංයුක්ත වේ. අවශ්‍ය නම් myisampack සමඟ සම්පීඩනය කිරීමෙන් MyISAM වගු ප්‍රමාණයෙන් තව දුරටත් අඩු කළ හැකි නමුත් කියවීමට පමණි. MyISAM දර්ශක එක් ගොනුවක සහ දත්ත තවත් ගොනුවක ගබඩා කරයි. MyISAM දර්ශක හැඹිලි සඳහා යතුරු බෆර භාවිතා කරන අතර දත්ත හැඹිලි කළමනාකරණය මෙහෙයුම් පද්ධතියට තබයි.

සමස්තයක් වශයෙන් මම බොහෝ අරමුණු සඳහා InnoDB සහ විශේෂිත භාවිතයන් සඳහා පමණක් MyISAM නිර්දේශ කරමි. InnoDB දැන් නව MySQL අනුවාද වල පෙරනිමි එන්ජිම වේ.


5
මම ඔබේ පිළිතුර කියවා එය දැනටමත් මෙහි ඇති අනෙක් අය සමඟ සසඳා බැලුවෙමි. BLOBs සඳහන් කළ යුත්තේ ඔබ පමණි. ඒවා සාමාන්‍යයෙන් සැළකිල්ලට ගනු ලැබේ. වේගයෙන් කියවිය හැකි MyISAM වගු වල නොවරදින වීරයන්ගෙන් එකක් වන myisampack ගැන සඳහන් කරන එකම එක ඔබේ ය. අද ඔබේ +1 වේ !!!
RolandoMySQLDBA

2
උදාහරණය සම්පීඩිත කියවීමට පමණක් ඇති වගුවක් වන අතර එහිදී ඔබට වගුව සම්පූර්ණයෙන් ප්‍රතිස්ථාපනය කිරීමෙන් යාවත්කාලීන කිරීම් සිදු වේ.
dabest1

32

ක්‍රීඩාවට ටිකක් ප්‍රමාදයි ... නමුත් මෙන්න මම මීට මාස කිහිපයකට පෙර ලියූ තරමක් සවිස්තරාත්මක ලිපියක් , මයිසෑම් සහ ඉනෝ ඩීබී අතර ඇති ප්‍රධාන වෙනස්කම් විස්තර කරමින්. කෝප්පයක් (සහ සමහර විට බිස්කට් එකක්) අරගෙන විනෝද වන්න.


MyISAM සහ InnoDB අතර ඇති ප්‍රධාන වෙනස වන්නේ යොමු කිරීමේ අඛණ්ඩතාව සහ ගනුදෙනු ය. අගුළු දැමීම, පෙරළීම සහ පූර්ණ-පෙළ සෙවීම් වැනි වෙනත් වෙනසක් ද ඇත.

යොමු අඛණ්ඩතාව

ආශ්‍රිත අඛණ්ඩතාව වගු අතර සම්බන්ධතා ස්ථාවරව පවතින බව සහතික කරයි. වඩාත් නිශ්චිතවම, මෙයින් අදහස් වන්නේ වගුවකට (උදා: ලැයිස්තුගත කිරීම්) විදේශීය යතුරක් (උදා: නිෂ්පාදන හැඳුනුම්පත) වෙනත් වගුවකට යොමු කරන විට (උදා: නිෂ්පාදන), පෙන්වා ඇති වගුවට යාවත්කාලීන කිරීම් හෝ මකාදැමීම් සිදු වූ විට, මෙම වෙනස්කම් සම්බන්ධකයට සම්බන්ධ වේ වගුව. අපගේ උදාහරණයේ දී, නිෂ්පාදනයක් නැවත නම් කළහොත්, සම්බන්ධක වගුවේ විදේශීය යතුරු ද යාවත්කාලීන වේ; 'නිෂ්පාදන' වගුවෙන් නිෂ්පාදනයක් මකා දැමුවහොත්, මකාදැමූ ප්‍රවේශයට යොමු වන ඕනෑම ලැයිස්තුගත කිරීමක් මකා දැමෙනු ඇත. තවද, ඕනෑම නව ලැයිස්තුගත කිරීමකට එම විදේශීය යතුර වලංගු, පවතින ප්‍රවේශයකට යොමු විය යුතුය.

InnoDB යනු සාපේක්ෂ DBMS (RDBMS) වන අතර එමඟින් යොමු යොමු අඛණ්ඩතාව ඇති අතර MyISAM එසේ නොවේ.

ගනුදෙනු සහ පරමාණුකතාව

SELECT, INSERT, UPDATE සහ DELETE වැනි දත්ත හැසිරවීමේ භාෂා (DML) ප්‍රකාශ භාවිතා කරමින් වගුවක දත්ත කළමනාකරණය කෙරේ. ගනුදෙනු කණ්ඩායමක් ඩීඑම්එල් ප්‍රකාශ දෙකක් හෝ වැඩි ගණනක් එක වැඩ ඒකකයකට එකතු කරයි, එබැවින් එක්කෝ මුළු ඒකකයම යෙදේ, නැතහොත් ඒ කිසිවක් නොවේ.

InnoDB සහාය දෙන අතර MyISAM ගනුදෙනු සඳහා සහාය නොදක්වයි.

MyISAM වගුවක් භාවිතා කරන විට මෙහෙයුමකට බාධා ඇති වුවහොත්, මෙහෙයුම වහාම අත්හිටවනු ලබන අතර, බලපෑම අවසන් වූ පේළි (හෝ එක් එක් පේළියේ දත්ත පවා) බලපායි.

InnoDB වගුවක් භාවිතා කරන විට මෙහෙයුමකට බාධා ඇති වුවහොත්, එය පරමාණුකතාව ඇති ගනුදෙනු භාවිතා කරන හෙයින්, කිසිදු ගනුදෙනුවක් සිදු නොවන බැවින්, සම්පූර්ණ කිරීමට නොගිය ඕනෑම ගනුදෙනුවක් බලාත්මක නොවේ.

පේළි අගුලු දැමීම එදිරිව

විමසුමක් MyISAM වගුවකට එරෙහිව ක්‍රියාත්මක වන විට, එය විමසන මුළු වගුවම අගුළු දමා ඇත. මෙයින් අදහස් කරන්නේ පසුකාලීන විමසීම් ක්‍රියාත්මක වන්නේ වත්මන් ප්‍රශ්නය අවසන් වූ පසුව පමණක් බවයි. ඔබ විශාල වගුවක් කියවනවා නම් සහ / හෝ නිතර කියවීමේ හා ලිවීමේ මෙහෙයුම් තිබේ නම්, මෙයින් අදහස් කරන්නේ විමසීම්වල විශාල පසුබෑමකි.

InnoDB වගුවකට එරෙහිව විමසුමක් ක්‍රියාත්මක වන විට, සම්බන්ධ වී ඇති පේළි (ය) පමණක් අගුළු දමා ඇති අතර, CRUD මෙහෙයුම් සඳහා ඉතිරි වගුව ඉතිරිව පවතී. මෙයින් අදහස් කරන්නේ විමසුම් එකම පේළියක් භාවිතා නොකරන්නේ නම් එකවර එකම වගුවක ධාවනය කළ හැකි බවයි.

InnoDB හි මෙම අංගය සමගාමී මුදල් ලෙස හැඳින්වේ. සමගාමී මුදල් තරම් විශාල, තෝරාගත් වගු පරාසයකට අදාළ වන විශාල අඩුපාඩුවක් ඇත, එහි කර්නල් නූල් අතර මාරුවීමේ පොදු කාර්යයක් ඇති අතර, සේවාදායකය නතර වීම වැළැක්වීම සඳහා ඔබ කර්නල් නූල් සඳහා සීමාවක් නියම කළ යුතුය. .

ගනුදෙනු සහ පෙරළීම්

ඔබ MyISAM හි මෙහෙයුමක් ක්‍රියාත්මක කරන විට, වෙනස්කම් සකසා ඇත; InnoDB හි, එම වෙනස්කම් නැවත පෙරළා දැමිය හැකිය. ගනුදෙනු පාලනය කිරීම සඳහා භාවිතා කරන වඩාත් පොදු විධානයන් වන්නේ COMMIT, ROLLBACK සහ SAVEPOINT ය. 1. COMMIT - ඔබට බහුවිධ ඩීඑම්එල් මෙහෙයුම් ලිවිය හැකිය, නමුත් වෙනස්කම් සුරැකෙන්නේ කොමිට් එකක් කළ විට පමණි 2. රෝල්බැක් - ඔබට තවමත් සිදු කර නොමැති ඕනෑම මෙහෙයුම් ඉවත දැමිය හැකිය 3. සුරැකුම් - ලැයිස්තුවේ ලක්ෂ්‍යයක් දක්වයි ROLLBACK මෙහෙයුමකට ආපසු යා හැකි මෙහෙයුම්

විශ්වසනීයත්වය

MyISAM කිසිදු දත්ත අඛණ්ඩතාවයක් ඉදිරිපත් නොකරයි - දෘඩාංග අසමත්වීම්, අපිරිසිදු වසා දැමීම් සහ අවලංගු කරන ලද මෙහෙයුම් මගින් දත්ත දූෂිත වීමට හේතු වේ. මේ සඳහා දර්ශක සහ වගු සම්පූර්ණයෙන් අළුත්වැඩියා කිරීම හෝ නැවත ගොඩනැඟීම අවශ්‍ය වේ.

InnoDB, අනෙක් අතට, දූෂණ වැළැක්වීම සඳහා ගනුදෙනු ලොගයක්, ද්වි-ලිවීමේ බෆරයක් සහ ස්වයංක්‍රීය චෙක්පත් කිරීම සහ වලංගුකරණය භාවිතා කරයි. InnoDB කිසියම් වෙනසක් කිරීමට පෙර, එය ගනුදෙනු කිරීමට පෙර දත්ත ibdata1 නමින් පද්ධති වගු ගොනුවකට වාර්තා කරයි. බිඳවැටීමක් සිදුවුවහොත්, එම ල .ු-සටහන් නැවත ධාවනය කිරීමෙන් InnoDB ස්වයංක්‍රීයව සොයා ගනී.

FULLTEXT සුචිගත කිරීම

MySQL අනුවාදය 5.6.4 තෙක් InnoDB FULLTEXT සුචිගත කිරීම සඳහා සහය නොදක්වයි. මෙම ලිපිය ලියන විට, බොහෝ හවුල් සත්කාරක සේවා සපයන්නන්ගේ MySQL අනුවාදය තවමත් 5.6.4 ට වඩා පහළින් පවතී, එයින් අදහස් වන්නේ InnoDB වගු සඳහා FULLTEXT සුචිගත කිරීම සහාය නොදක්වන බවයි.

කෙසේ වෙතත්, මෙය MyISAM භාවිතා කිරීමට වලංගු හේතුවක් නොවේ. MySQL හි යාවත්කාලීන අනුවාදයන්ට සහය දක්වන සත්කාරක සැපයුම්කරුවෙකු වෙත වෙනස් වීම වඩාත් සුදුසුය. FULLTEXT සුචිගත කිරීම භාවිතා කරන MyISAM වගුවක් InnoDB වගුවකට පරිවර්තනය කළ නොහැකි බව නොවේ.

නිගමනය

අවසාන වශයෙන්, InnoDB ඔබේ සුපුරුදු ගබඩා එන්ජිම විය යුතුය. නිශ්චිත අවශ්‍යතාවයක් ඉටු කරන විට MyISAM හෝ වෙනත් දත්ත වර්ග තෝරන්න.


1
ස්තූතියි, සැබවින්ම තොරතුරු සහ පැහැදිලි සාරාංශය.
informatik01

31

තවත් එක් දෙයක්: ගොනු පද්ධතියේ සැණින් ඡායාරූපයක් ගැනීමෙන් ඔබට InnoDB වගු උපස්ථ කළ හැකිය. MyISAM උපස්ථ කිරීම සඳහා mysqldump භාවිතා කිරීම අවශ්‍ය වන අතර එය ස්ථාවර බව සහතික නොවේ (උදා: ඔබ දෙමව්පියන්ට සහ ළමා වගුවකට ඇතුළු කළහොත්, ඔබේ උපස්ථයේ ඇත්තේ ළමා වගුවේ පේළිය පමණි).

මූලික වශයෙන්, ඔබ සතුව දත්තවල තවත් පිටපතක් තිබේ නම් සහ එය MySQL තුළ පමණක් හැඹිලිගත කරන්නේ නම්, එය PHP වෙබ් අඩවියකින් සම්මත ප්‍රවේශයකට ඉඩ දීම සඳහා, එවිට MyISAM හොඳයි (එනම් එය පැතලි CSV ගොනුවකට වඩා හොඳය. සමගාමී ප්‍රවේශය). දත්ත සමුදාය යනු දත්තවල සත්‍ය “ප්‍රධාන පිටපත” නම්, ඔබ කරන්නේ INSERTසහ UPDATEභාවිතා කරන්නන්ගෙන් සත්‍ය දත්ත භාවිතා කරන්නේ නම් , InnoDB හැර වෙනත් දෙයක් භාවිතා කිරීම මෝඩකමකි, ඕනෑම ආකාරයක පරිමාණයකින් MyISAM විශ්වාස කළ නොහැකි සහ කළමනාකරණය කිරීමට අපහසුය, ඔබ 'කරන්නේ වරදී myisamchkඕනෑම කාර්ය සාධන වාසි අහිමිකරන, කාලය භාගයක් ...

(මගේ පෞද්ගලික අත්දැකීම: MyISAM හි ටෙරාබයිට් 2 DB).


19

මගේ අත්දැකීම් අනුව, වඩාත්ම වැදගත් වෙනස වන්නේ එක් එක් එන්ජිම අගුලු දැමීම හසුරුවන ආකාරයයි. InnoDB පේළි අගුළු දැමීම භාවිතා කරන අතර MyISAM මේස අගුළු දැමීම භාවිතා කරයි. රීතියක් ලෙස, මම බර වගු ලිවීම සඳහා InnoDB සහ බර වගු කියවීම සඳහා MyISAM භාවිතා කරමි.

අනෙකුත් වැදගත් වෙනස්කම් වලට ඇතුළත් වන්නේ:

  1. InnoDB ආධාරක ගනුදෙනු සහ විදේශීය යතුරු. මයිසාම් එසේ නොවේ.
  2. MyISAM පූර්ණ පෙළ සුචිගත කිරීම භාවිතා කරයි.
  3. MyISAM දත්ත අඛණ්ඩතාව බලාත්මක කිරීමේ දුර්වල කාර්යයක් කරයි.

යල් පැන ගිය - InnoDB දැන් FULLTEXTසහ SPATIAL. InnoDB සඳහා යහපත් දෙකම read- හා ලිවීම්-අධික බර.
රික් ජේම්ස්

9

මම MySQL සඳහා 'පෙරනිමි' වගු තේරීමක් ලෙස MyISAM බැලීමට නැඹුරු වෙමි, එබැවින් InnoDB හි බොහෝ පරිශීලකයින් සඳහා ඇති වෙනස්කම් මම පෙන්වා දෙමි

  • පේළි මට්ටම් අගුළු දැමීම
  • විදේශීය යතුරු බලාත්මක කිරීම
  • ගනුදෙනු සහාය
  • ඉහළ භාවිත පද්ධති මත කාර්ය සාධනය පහර

5
නවතම MySQL නිකුතුව හැරෙන්නට තවදුරටත් MyISAM සුපුරුදු එන්ජිම ලෙස භාවිතා නොකරයි. 5.5 දී ඔවුන් පෙරනිමිය InnoDB ලෙස වෙනස් කළේය :). InnoDB පොදුවේ 'කාර්ය සාධන පහරක්' ලබා ගනී යන සාමාන්‍යකරණය සමඟ මම එකඟ නොවෙමි. නිසි ලෙස සුචිගත කිරීම සහ හොඳින් වින්‍යාසගත කර ඇති මතක සැකසුම් සහිත හොඳින් සැලසුම් කරන ලද InnoDB වගු වලට InnoDB වගුවක් ක්‍රියාත්මක කිරීමට මෙන්ම MyISAM
TechieGurl

3
බොහෝ "ඉහළ භාවිත" තත්වයන් තුළ InnoDB ඇත්ත වශයෙන්ම MyISAM වලට වඩා හොඳින් ක්‍රියා කරයි . MyISAM යනු විශේෂිත ගැටළුවක් සඳහා විශේෂිත මෙවලමක් වන අතර InnoDB බොහෝ අවස්ථාවන්හිදී ඔබට වඩා හොඳ සේවාවක් සපයනු ඇත (එබැවින් MySQL කණ්ඩායම එය පෙරනිමි එන්ජිම බවට පත් කළේ ඇයි). එයට හේතුව InnoDB පරිණත වූ පසුවත්, MySAM ප්‍රජාව පෙරනිමියෙන් MyISAM භාවිතා කිරීමේ පුරුද්ද දක්වා වර්ධනය වූ එකම එන්ජිම MyISAM වීමයි.
නික් චම්මාස්

2
InnoDB සඳහා FULLTEXT සෙවීම MySQL 5.6 සංවර්ධන චක්‍රය හරහා අර්ධ වශයෙන් එකතු කරන ලදි. දැන් සඳහන් කර ඇති URL එක InnoDB ද ආවරණය කරයි.
මැක්ස් වෙබ්ස්ටර්

6

මයිසම්

MYISAM විසින් වගු මට්ටමේ අගුලු දැමීම, FULLTEXT සෙවීම සපයයි. සියලුම ගබඩා එන්ජින් හැසිරවීමේ වඩාත් නම්‍යශීලී AUTO_INCREMENTED තීරුව MYISAM සතුව ඇත. මයිසම් ගනුදෙනු සඳහා සහාය නොදක්වයි.

INNODB

INNODB යනු ගනුදෙනු ආරක්ෂිත ගබඩා එන්ජිමකි. INNODB හි කැපවීම, පෙරළීම සහ බිඳවැටීම් ප්‍රතිසාධන හැකියාවන් ඇත. INNODB විදේශීය යතුරු යොමු කිරීමේ අඛණ්ඩතාවයට සහය දක්වයි.


6

MySQL 5.6 වෙනස්කම් ඇතුළත් වේ

INNODB ගබඩා එන්ජිම:

  • එය පූර්ණ ACID (පරමාණුකතාව, අනුකූලතාව, හුදකලාව, කල්පැවැත්ම) අනුකූලතාවය සපයයි. ගනුදෙනු එකිනෙකාගෙන් හුදකලා කිරීමට බහු අනුවාදය භාවිතා කරයි.
  • MySQL සේවාදායකය හෝ සේවාදායකය ක්‍රියාත්මක වන ධාරකයේ බිඳ වැටීමෙන් පසු InnoDB ස්වයංක්‍රීයව ප්‍රතිසාධනය සපයයි.
  • InnoDB විදේශීය යතුරු සහ කැස්කැඩ් මකාදැමීම් සහ යාවත්කාලීන කිරීම් ඇතුළුව යොමු කිරීමේ අඛණ්ඩතාවයට සහය දක්වයි.
  • MySQL 5.6 ඉනෝ ඩීබී හි වේදිකාව මත ගොඩනගා ඇති අතර එය පෙරනිමි ගබඩා එන්ජිම ලෙස සම්පුර්ණයෙන්ම ඒකාබද්ධ වී ඇත
  • නිරන්තර ප්‍රශස්තිකරණ සංඛ්‍යාලේඛන : InnoDB දර්ශක සංඛ්‍යාලේඛනවල වැඩි දියුණු කළ නිරවද්‍යතාවය සහ MySQL නැවත ආරම්භ කිරීම හරහා අනුකූලතාව සපයයි.
  • InnoDB වගු හැඹිලිය කප්පාදු කිරීම: විශාල වගු සංඛ්‍යාවක් ඇති පද්ධතිවල මතක බර ලිහිල් කිරීම සඳහා, InnoDB දැන් විවෘත කළ වගුවකට සම්බන්ධ මතකය නිදහස් කරයි. LRU ඇල්ගොරිතමයක් ප්‍රවේශ නොවී දීර් est තම කාලයක් ගිය වගු තෝරා ගනී.
  • සම්පූර්ණ පා search සෙවුමට සහය දක්වයි: විශේෂ ආකාරයේ දර්ශකයක් වන ෆුල්ටෙක්ස්ට් දර්ශකය, පෙළ පදනම් කරගත් තීරු සහ ඒවායේ අඩංගු වචන සම්බන්ධ විමසුම් සහ ඩීඑම්එල් මෙහෙයුම් සමඟ ගනුදෙනු කිරීමට ඉනෝ ඩීබීට උදව් කරයි. මෙම දර්ශක භෞතිකව සමස්ත InnoDB වගු ලෙස නිරූපණය කෙරේ.
  • InnoDB MyISAM වලට වඩා පූර්ණ-පෙළ සෙවීමේදී වේගවත් බව පෙනේ

එබැවින්, MyISAMඔබ දැනටමත් 5.6 දක්වා උත්ශ්‍රේණිගත කර ඇත්නම් එන්ජිම භාවිතා කිරීමේ කිසිදු තේරුමක් නැත , එසේ නොවේ නම් MySQL 5.6 වෙත යාවත්කාලීන කිරීමට බලා නොසිටින්න.

MySQL 5.6 භාවිතා කරමින් InnoDB VS MyISAM කාර්ය සාධනය


4

මයිසම්

MyISAM යනු MySQL සඳහා ගබඩා එන්ජිමකි. MySQL 5.5 ට පෙර එය MySQL සඳහා පෙරනිමි ගබඩා එන්ජිම විය. එය පැරණි ISAM ගබඩා එන්ජිම මත පදනම් වේ. අධික කියවීම් මෙහෙයුම් සහිත පරිසරයන් සඳහා MyISAM ප්‍රශස්තිකරණය කර ඇති අතර, ලිවීම් කිහිපයක් හෝ කිසිවක් නැත. MyISAM වේගයෙන් කියවීමට ඉඩ දෙන හේතුව එහි දර්ශකවල ව්‍යුහයයි: සෑම ප්‍රවේශයක්ම දත්ත ගොනුවේ වාර්තාවකට යොමු කරයි, සහ ගොනුවේ ආරම්භයේ සිටම දර්ශකය ඕෆ්සෙට් වේ. මේ ආකාරයෙන් වාර්තා ඉක්මනින් කියවිය හැකිය, විශේෂයෙන් ආකෘතිය ස්ථාවර වූ විට. මේ අනුව, පේළි නියත දිගකින් යුක්ත වේ. කෙනෙකුට MyISAM ට වැඩි කැමැත්තක් දැක්විය හැකි සාමාන්‍ය ප්‍රදේශයක් වන්නේ දත්ත ගබඩාවයි, මන්ද එයට ඉතා විශාල වගු පිළිබඳ විමසීම් ඇතුළත් වන අතර දත්ත සමුදාය භාවිතයේ නොමැති විට (සාමාන්‍යයෙන් රාත්‍රිය වන විට) එවැනි වගු යාවත්කාලීන කිරීම සිදු කෙරේ. දත්ත ගොනුවේ අවසානයට නව පේළි එකතු කර ඇති නිසා ඇතුළු කිරීම් ද පහසුය. කෙසේවෙතත්, මකාදැමීම සහ යාවත්කාලීන කිරීම වඩාත් ගැටළු සහගත ය: මකාදැමීම් හිස් ඉඩක් තැබිය යුතුය, නැතහොත් පේළි වල ඕෆ්සෙට් වෙනස් වනු ඇත; පේළි වල දිග කෙටි වන බැවින් යාවත්කාලීන කිරීම් සඳහා ද එයම වේ; යාවත්කාලීනය මඟින් පේළිය දිගු කරයි නම්, පේළිය කැබලි වී ඇත. පේළි අවලංගු කිරීමට සහ හිස් ඉඩක් ලබා ගැනීමට,OPTIMIZE TABLEවිධානය ක්‍රියාත්මක කළ යුතුය. මෙම සරල යාන්ත්‍රණය නිසා සාමාන්‍යයෙන් MyISAM දර්ශක සංඛ්‍යාලේඛන තරමක් නිවැරදි ය. MyISAM හි අනෙකුත් ප්‍රධාන අඩුපාඩු වන්නේ ගනුදෙනු සහාය සහ විදේශීය යතුරු නොමැති වීමයි.

InnoDB

InnoDB යනු MySQL සඳහා ගබඩා එන්ජිමකි. MySQL 5.5 සහ පසුව එය පෙරනිමියෙන් භාවිතා කරන්න. එය විදේශීය යතුරු ආධාරක (ප්‍රකාශන යොමු කිරීමේ අඛණ්ඩතාව) සමඟ සම්මත ACID අනුකූල ගනුදෙනු විශේෂාංග සපයයි. එය SQL සහ XA ගනුදෙනු, FULLTEXTමේස අවකාශ , දර්ශක සහ අවකාශීය මෙහෙයුම් යන දෙකම OpenGIS ප්‍රමිතියට අනුව ක්‍රියාත්මක කරයි. MySQL AB විසින් බෙදා හරින ලද බොහෝ ද්විමයන්හි එය ප්‍රමිතියක් ලෙස ඇතුළත් කර ඇති අතර, ව්‍යතිරේකය සමහර OEM අනුවාදයන් වේ. මෘදුකාංගය ඔරකල් සංස්ථාව විසින් ද්විත්ව බලපත්‍ර ලබා ඇත; එය බෙදා හරිනු ලබන්නේ ග්නූ පොදු මහජන බලපත්‍රය යටතේ වන අතර හිමිකාර මෘදුකාංගවල ඉනෝ ඩීබී ඒකාබද්ධ කිරීමට කැමති පාර්ශවයන්ට බලපත්‍ර ලබා දිය හැකිය.

ෆෝක්ස්

මාරියා ඩීබී හි ආරියා නම් ගබඩා එන්ජිමක් ඇති අතර එය "මයිසාම් වලට කඩාවැටෙන ආරක්ෂිත විකල්පයක්" ලෙස විස්තර කෙරේ. මාරියා ඩීබී සහ පර්කෝනා සර්වර් පෙරනිමියෙන් එක්ස්ට්‍රා ඩීබී නමින් ඉනෝ ඩීබී දෙබලක භාවිතා කරයි. එක්ස්ට්‍රාඩ්බී නඩත්තු කරන්නේ පර්කෝනා විසිනි. Oracle InnoDB හි වෙනස්කම් නිතිපතා XtraDB වෙත ආනයනය කරනු ලබන අතර සමහර දෝෂ නිවැරදි කිරීම් සහ අමතර විශේෂාංග එකතු කරනු ලැබේ.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.