MySQL学习笔记:InnoDB和MyISAM的差别
InnoDB
和MyISAM
是在使用MySQL
最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM
类型不支持事务处理等高级处理,而InnoDB
类型支持。MyISAM
类型的表强调的是性能,其执行数度比InnoDB
类型更快,但是不提供事务支持,而InnoDB
提供事务支持已经外部键等高级数据库功能。
MyIASM是IASM表的新版本,有如下扩展:
二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。
以下是一些细节和具体实现的差别:
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%”
任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL
的性能优势。
问:MySQL中的MyISAM是否支持外键约束?我创建了一个InnoDB的表,并声明了外键,现在我想把它转换成MyISAM。这是否是可行的?如果可以的话,我该怎么做呢?
答:外键约束位
于MyISAM
handler新增特性的to-do列表中,它们还没有被实现,并且可能还要持续一段时间。与此同时,您会发现InnoDB是实现大多数目的的一种良好的
表handler。但是,如果您一定要将表转换成MyISAM,您将会失去执行外键的能力。想要将表转换为另一种handler,您可以使用如下语法:
ALTER TABLE 表名 TYPE= MyISAM;
相关文档:
Mysql Explain 详解
一.语法
explain < table_name >
例如: explain select * from t3 where id=3952602;
二.explain输出解释
+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys &nb ......
近日,MySQL 5.5 第一个版本发布了,基于MySQl 5.4,但是在性能上相对于当前的5.0/5.1有了很大的提升。
新特性:
支持semisynchronous (半同步)复制接口,可搭建出一个相对完美的MySQL高可用性方案
集成Innodb plugin 1.0.6
支持 SQL 标准 SIGNAL 和 RESIGNAL 语句
增强XML功能,支持 LOAD XML 语句
可通过 A ......
Jsp 连接 mySQL、Oracle 数据库备忘
2009-12-15 16:47
Jsp 环境目前最流行的是 Tomcat5.0。Tomcat5.0 自己包含一个 Web 服务器,如果是测试,就没必要把 Tomcat 与 IIS 或 Apache 集成起来。在 Tomcat 自带的 Web 服务器下可以进行 Jsp 测试。
安装 Tomcat5.0 前需要安装 JDK(如果是 Windows server ......
本文转载自:http://www.54xue.com/?action-viewnews-itemid-7498
#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO
#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/m ......
解决MySql数据乱码:
1 写过滤器设置编码格式(格式和JSP页面的编码一样),或则在请求里面写request.setCharacterEncoding("编码方式");
2 如果是查询出数据乱码,在链接的URL上加上编码格式(你这里加了,没问题);
3 修改my.ini文件里面的 default-character-set= 您要的编码格式 (一共有两处,你查找一下 改为一样的编 ......