我自己也是搜寻了很多网上的资料,发现现在使用的PHP视频教程非常不错!
希望对和我一样喜欢自学的朋友,一起实现理想!
MyISAM 和 InnoDB 讲解
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
以下是一些细节和具体实现的差别:
◆1.InnoDB不支持FULLTEXT类型的索引。
◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。
我作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,但是从我目前运维的数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是我的首选。
原因如下:
1、首先我目前平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。
2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
3、从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小的一个数据库实例的数据量基本都是几十G大小。
4、从我接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。
5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。
6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。
7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。
当然Innodb也不是绝对不用,用事务的项目如模拟炒股项目,我就是用Innodb的,活跃用户20多万时候,也是很轻松应付了,因此我个人也是很喜欢Innodb的,只是如果从数据库平台应用出发,我还是会首选MyISAM。
另外,可能有人会说你MyISAM无法抗太多写操作,但是我可以通过架构来弥补,说个我现有用的数据库平台容量:主从数据总量在几百T以上,每天十多亿 pv的动态页面,还有几个大项目是通过数据接口方式调用未算进pv总数,(其中包括一个大项目因为初期memcached没部署,导致单台数据库每天处理 9千万的查询)。而我的整体数据库服务器平均负载都在0.5-1左右。
分享到:
相关推荐
MySQL中的InnoDB和MyISAM是两种非常重要的存储引擎,它们各自有着独特的特性和适用场景。下面我们将深入探讨这两种引擎的主要区别。 首先,InnoDB是MySQL的默认存储引擎,它支持事务处理,这意味着用户可以执行诸如...
本资源摘要信息涵盖了 MySQL 相关的面试题,包括关系型和非关系型数据库的区别、MySQL 语句执行步骤、索引的使用原因、索引的三种常见底层数据结构、索引的常见类型、MyISAM 和 InnoDB 实现 B 树索引方式的区别、...
本文总结了MySQL面试题中的知识点,包括索引、MyISAM和InnoDB、事务、数据库设计、索引使用注意事项、CHAR和VARCHAR、NOW()和CURRENT_DATE()、视图、游标和存储过程、drop、delete和truncate等。
MySQL作为一款流行的开源数据库...了解MySQL的复制原理、流程以及MyISAM和InnoDB的区别对于任何希望成为DBA的候选人来说都是至关重要的。掌握这些知识点对于在面试中展示自己、处理生产环境中的问题都有着重要的意义。
在本文中,我们将对MySQL面试题及答案进行详解,涵盖 MySQL 的基本概念、存储引擎、数据类型、索引、事务、锁机制等方面的知识点。 一、 MySQL 基本概念 1. MySQL 是一个开源的关系数据库管理系统,以其高性能、...
MySQL是许多互联网公司首选的关系型数据库,面试中会涉及SQL语句优化、索引原理、事务处理、存储引擎的区别(InnoDB与MyISAM)、数据库设计原则(范式理论)以及数据库复制与主从同步等。对于大数据量场景,还会考察...
MySQL面试题涵盖了许多核心知识点,包括索引使用、死锁处理、SQL优化、数据库引擎对比、分布式主键选择以及事务管理等。以下是对这些主题的详细解析: 1. **索引使用注意事项**: - 索引在含有`OR`、`LIKE`通配符...
2. **InnoDB与MYISAM的区别**: - **事务支持**:InnoDB支持事务,而MYISAM不支持,InnoDB更适合需要事务处理的应用。 - **锁机制**:InnoDB支持行级锁,而MYISAM使用表级锁,导致并发性能不同。 - **外键**:...
在面试题相关的问题中,了解MySQL的存储引擎如MyISAM和InnoDB的区别非常重要。MyISAM不支持事务,适合读多写少的场景,而InnoDB支持事务处理,适用于需要数据一致性的应用。锁机制用于控制并发访问,共享锁用于读...
根据给定文件的信息,我们可以提炼出关于MySQL复制原理及其流程、MySQL中MyISAM与InnoDB存储引擎的主要区别等知识点。 ### MySQL复制原理及流程 #### 复制基本原理流程 MySQL复制是一种分布式架构下的数据同步...
以下是一些关于数据库,特别是针对Oracle、MySQL和SQL Server的面试题及其背后的深入知识点: 1. **数据库基本概念** - 数据库是什么?它如何存储和管理数据? - 关系型数据库的基本原理是什么?比如,什么是第一...
MySQL面试题涵盖了许多核心知识点,包括数据库复制原理、存储引擎的区别、数据类型的比较、事务处理、日志系统、性能优化、备份策略、监控方法、一致性校验、字符集支持、数据字典维护以及表结构设计。以下是这些...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其面试题通常涵盖了各种关键概念和技术。以下是对给定的20道经典MySQL面试题中涉及知识点的详细解释: 1. **事务**: - **事务**是数据库操作的基本单位,确保...
MySQL 面试知识点及大厂面试题 MySQL 是一个关系型数据库管理系统,广泛应用于各种行业和领域。作为一名 IT 行业大师,我将从存储引擎、锁机制、事务等方面详细剖析 MySQL 的知识点,并总结出大厂面试题的要点。 ...
标题和描述中提到的Java面试题包含多个方面的知识点,涵盖Java基础、算法、架构设计、设计模式等。下面详细说明各方面的知识点。 Java基础知识点: 1. 关于Java中为什么等待和通知是Object类的成员方法而不是Thread...
可能会被问到如何进行SQL性能调优、InnoDB与MyISAM的区别、事务的ACID属性,或者如何设计合理的数据库索引。 **JavaWeb面试题**: JavaWeb面试题涵盖Servlet、JSP、过滤器、监听器、MVC架构等。你可能需要理解HTTP...
本文将从 MySQL 面试题的角度,总结和解释 MySQL 的一些重要概念和知识点。 首先,让我们从 MySQL 的索引开始。索引是 MySQL 中的一种数据结构,用于快速查找和检索数据。索引可以分为主键索引、唯一索引和普通索引...
【MySQL数据库高级工程师面试知识点详解】 在MySQL数据库高级工程师的...以上这些知识点是MySQL DBA面试中可能会遇到的重点,深入理解和实践这些内容,将有助于你顺利通过面试并成为一名优秀的MySQL数据库高级工程师。