Mysql常用的搜索引擎有三种
我用的默认的是InnoDB
搜索引擎是对表来说的
CREATE TABLE 表名
(
字段……
) ENGINE=InnoDB
查看数据库的引擎配置
show engines;
查询表的状态可以看到使用的引擎
show table status from dbname where name="tablename";
修改引擎use DBNAME;
alter table tablename engine=innodb;
MyISAM
特点:
(1)不支持事务
(2)表级锁定,可以让锁定实现成本很小,但同时降低了并发性能。
(3)读写互相阻塞。写入的时候不能读取,读取的时候不会写入,但是读本身不会阻塞另外的读
(4)只会缓存 索引。可以通过缓存大大提高访问性能减少磁盘IO,但是只缓存索引,不缓存数据
讲一下(2)的锁定是什么意思?为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。
Mysql锁定分三级:行级,页级,表级。锁定的越小,发生锁定资源争用的概率也就越小,能够给予的并发能力也就越大。
使用表级的有MyISAM,Memory,CSV等一些非事务的存储引擎。
使用行级的有InnoDB和NDBCluster,页级有BerkeleyDB
所以根据特点确定支持场景:不需要事务,低并发,数据修改少,以读为主,数据一致性要求不高。
InnoDB
特点:
(1)支持事务,支持4个事务隔离级别
(2)行级锁定
(3)读写阻塞与事务隔离级别有关
(4)能缓存索引也能缓存数据,硬件设备内存大的话,可以通过缓存来减少磁盘IO.
(5)整个表和主键以Cluster方式存储,组成平衡树
(6)Secondary Index会保存主键信息
事务隔离级别:
Read uncommitted(读没有提交的事务的数据,会出现脏读),
Read committed(读提交的事务的数据,解决脏读,会出现不可重复读)举例:一条数据刚刚在一个事务中读出是一个结果,然后另一个事务对这条数据进行了修改,然后上一个事务中其他的查询,就会读出不同的结果,
Repeatable read(开始读取事务时,不再允许修改操作,解决了不可重复读,会导致幻读,mysql默认),例如:第一个人将数据表中所有的数据的一个值由1改成2,这个时候另一个人新增了一条,第一个人就会产生幻读的感觉。
Serializable(序列化,最高的隔离级别,串行化事务执行顺序,避免脏读幻读和不可重复读,但是效率低下,一般不用)。
幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
所以根据特点确定支持场景:需要事务,高并发,数据更新很频繁,数据一致性要求高
NDBCluster
特点:
(1)分布式,可以用多个NDBCluster存储引擎组成集群来分别存一部分数据。
(2)支持事务
(3)可以与mysqld不在一台主机,通过网络交互
(4)内存需求大
mysqld是什么?是mysql的守护进程,使用mysql之前必须先使用mysqld
所以根据特点确定支持场景:需要事务,非常高的并发,对单个请求的响应不是很严格,查询简单,每次请求数量较少
其他的引擎有:Memory,Merge,CSV,Archive