MySQL 中的MyISAM存储引擎的特性:
- 不支持事务,没有行级锁,当数据库崩溃时,不可以安全恢复
- 加锁并发
- 当读取某个表的数据时,会给该表加共享锁,写入时会加排他锁,在查询表的数据时可以并发插入新的记录
- 索引特性 支持 Text Blog 类型的字段作为索引,基于前500个字符创建,也支持全文索引
- 延迟更新索引键 每次修改键索引数据并不会马上写入硬盘上,而是在内存中的键缓冲区,在清理缓存区或关闭表时才写入磁盘中,但是当数据库崩溃时会造成索引的损失,需要执行修复操作
- MyISAM压缩表 就是当某个表创建时,并不需要进行修改则可以将表压缩,这样既节省了磁盘空间,又可以减少磁盘I/O 从而提升了查询的性能,压缩表也支持索引,不过也是只读的。
InnoDB存储引擎特性
- 支持事务,支持在线热备份,不需要关闭服务器就能备份
- 默认隔离级别为可重复读,使用 MVCC多版本并发控制,提高了并发性
- 使用间隙锁来防止幻读,不仅仅涉及到读取的行,还会是用间隙锁防止插入其他数据
- 是基于聚族索引建立的数据库,对于主键的查询很高的性能。二级索引(非主键索引)必须包含主键列,若主键列比较大时,其他索引列也会很大,所以主键列尽可能小
MYISM 支持全文索引:
给数据库表添加一个MYISAM数据库引擎
alter table song engine=MYISAM
alter table song add fulltext index(songname)
也可以对多个字段加全文索引
alter table song add fulltext index(songname,songkind)
select * from song match(songname) against('zhou')
MyISAM:特点 设计简单,数据以紧密格式存储,最典型的性能问题是表锁
先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作?
假设一个文章表里面包含几个字段:文章id、文章作者、文章标题、文章内容
比如,我们对文章内容这个字段artilce_content建立全文索引,这样方便对文章里面的内容使用关键词搜索。
数据库系统首先需要从文章内容(这个字段内容)中提取关键词,因为只有提取了关键词,才好建立类似索引目录—类似于新华字典那样的笔画页码对应关系,当你搜索一个词语”beijing”的时候,就直接去索引中查找,然后就可以定位到数据行的具体位置了,不需要扫描文章表很多行。
这就像,如果我想去新华字典中查找一个汉字,我直接按照笔画或者按照拼音来查找(这个就是新华字典的索引),避免把新华字典从头翻到尾部,这样的效率多低。没错,如果没有索引,数据库系统就是需要这样子遍历扫描整个表才能得到数据的。
ps:机器其实是死的,你写的代码让他做什么就做什么。而人有眼睛,可以通过眼睛来看,比如大体翻看一下新华字典,也许眼睛就看到我需要的汉字了呢。