MySQL存儲引擎筆記

jopen 12年前發布 | 15K 次閱讀 MySQL 數據庫服務器

存儲引擎概述

插件式存儲引擎是MySQL數據庫的重要特性之一,用戶可以根據應用的需要選擇如何存儲和索引數據、是否使用事物等

  • 特點

    </td>

    MyISAM

    </td>

    InnoDB

    </td>

    Memory

    </td> </tr>

    事物安全

    </td>

     

    </td>

    支持

    </td>

     

    </td> </tr>

    鎖機制

    </td>

    表鎖

    </td>

    行鎖

    </td>

    表鎖

    </td> </tr>

    索引類型

    </td>

    B樹索引

    全文索引

    </td>

    B樹索引

    集群索引

    </td>

    B樹索引

    哈希索引

    </td> </tr>

    數據緩存

    </td>

     

    </td>

    支持

    </td>

    支持

    </td> </tr>

    索引緩存

    </td>

    支持

    </td>

    支持

    </td>

    支持

    </td> </tr>

    支持外鍵

    </td>

     

    </td>

    支持

    </td>

     

    </td> </tr> </tbody> </table> </div>

    存儲引擎特性

    MyISAMISAM Indexed Sequential Access Method )引擎

    a)        MyISAM

    劣勢:不支持事物、不支持外鍵

    優勢:訪問速度快

    適用:對事物完整性無要求、并發性不高或以selectinsert操作為主的應用(web、數據倉庫等)

    b)       MyISAMy表存儲格式

    靜態表:存儲迅速、容易緩存、故障恢復容易(注:數據末尾的空格會被自動剔除)

    動態表:空間占用小,刪除和更新易導致碎片化(注:optimize tablemyisamchk -r碎片整理)

    壓縮表:每條記錄單獨壓縮、訪問開支小

    InnoDB引擎

    a)      InnoDB

    劣勢:寫操作效率差、占用更多磁盤(保留數據和索引)

    優勢:事物安全、支持外鍵

    適用:對事物完整性和并發下得一致性要求高并且有較多更新、刪除操作(InnoDB有效降低了刪除更新導致的表鎖定)的應用(計費、財務系統等)

    b)     自動增長序列

    1.      自動增長列必須是索引。

    2.      如果是組合索引,則自動增長列必須是第一列(MyISAMy可為其他列,MyISAMy是按照前幾列排序后遞增的)

    例:

    create table autoincrease_demo_myisam

    (t1 smallint not null auto_increment,

     t2 smallint not null,

     name varchar(20),

     index(t2,t1)

    )engine =myisam;

    依次插入以下數據

    t1

    </td>

    2

    </td>

    2

    </td>

    2

    </td>

    3

    </td>

    3

    </td>

    2

    </td>

    2

    </td>

    2

    </td>

    2

    </td>

    2

    </td>

    3

    </td>

    3

    </td>

    2

    </td>

    2

    </td> </tr>

    t2

    </td>

    2

    </td>

    3

    </td>

    2

    </td>

    3

    </td>

    4

    </td>

    2

    </td>

    3

    </td>

    2

    </td>

    3

    </td>

    2

    </td>

    3

    </td>

    4

    </td>

    2

    </td>

    3

    </td> </tr> </tbody> </table> </div>

    查看數據庫的中數據:select * from autoincrease_demo_myisam order by t2,t1;

    +----+----+------+

    | t1 | t2 | name |

    +----+----+------+

    | 1 |  2 | 2    |

    | 2 |  2 | 3    |

    | 3 |  2 | 2    |

    | 4 |  2 | 2    |

    | 5 |  2 | 3    |

    | 6 |  2 | 2    |

    | 7 |  2 | 3    |

    | 8 |  2 | 2    |

    | 9 |  2 | 2    |

    | 10 | 2 | 3    |

    | 1 |  3 | 3    |

    | 2 |  3 | 4    |

    | 3 |  3 | 3    |

    | 4 |  3 | 4    |

    +----+----+------+

    c)      外鍵約束

    MySQL支持外鍵的存儲引擎只有InnoDB。在創建外鍵的時候,要求父表必須有對應的索引,字表在創建外鍵的時候也會創建對應的索引。外鍵關聯的操作主要有restrictcascadeset nullno action.

    restrictno action:在子表有關聯記錄的情況父表不能更新。

    cascade:父表在更新或者刪除時,更新或者刪除子表對應記錄。

    set null:父表在更新或者刪除時,字表對應的字段被set null

    d)     存儲方式

    共享表空間存儲:所有的數據和索引保存在innodb_data_home_dirinnodb_data_file_path定義的表空間中,可以是多個文件。

    獨立表空間存儲:每個表的數據和索引單獨保存在自己的表空間中。(單表備份和恢復較方便)

    Memory引擎

    a)      優點:Memory存儲引擎使用存儲在內存中的內容創建表,默認使用HASH索引。表訪問非常快(在啟動服務的時候可以使用--init-file選項將insert into ,select load data infile這樣的語句放入這個文件,就可以再服務啟動時從持久穩定的數據源裝載表。)

    b)     缺點:表大小有限制,服務關閉表中的數據就會丟失

    c)      適用:</strong>內容變化不頻繁,作為統計操作的中間結果表。</span>

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
  • sesese色