MySQL索引类型主要有以下几种。
1. B-Tree索引
最常见的索引类型,基于B-Tree数据结构。B-Tree的基本思想是,
所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等。
所以B-Tree适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。
但是当索引多列时,列的顺序特别重要,需要格外注意。
InnoDB和MyISAM都支持B-Tree索引。
InnoDB用的是一个变种B+Tree,而MyISAM为了节省空间对索引进行了压缩,从而牺牲了性能。
2. Hash索引
基于hash表。所以这种索引只支持精确查找,不支持范围查找,不支持排序。
这意味着范围查找或ORDER BY都要依赖server层的额外工作。
目前只有Memory引擎支持显式的hash索引(但是它的hash是nonunique的,
冲突太多时也会影响查找性能)。Memory引擎默认的索引类型即是Hash索引,虽然它也支持B-Tree索引。
例子:
CREATE TABLE testhash (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
KEY USING HASH(fname)
) ENGINE =MEMORY;
3. Spatial (R-Tree)(空间)索引
只有MyISAM引擎支持,并且支持的不好。可以忽略。
4. Full-text索引
主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
Full-text索引跟其它索引大不相同,它更像是一个搜索引擎,
而不是简单的WHERE语句的参数匹配。你可以对某列分别进行full-text索引和B-Tree索引,
两者互不冲突。Full-text索引配合MATCH AGAINST操作使用,而不是一般的WHERE语句加LIKE。
mysql常用的两种引擎:
MyISAM:支持: full-text索引,保存表行数(select count(*) from tanble 不用全表扫面)
不支持:事务,外键,行级锁
InnoDB: 支持: 事务,外键,行级锁(默认)
不支持:full-text索引,不保存表行数
事务并发问题:
原文: 花弄影 的 MySQL的四种事务隔离级别 :https://www.cnblogs.com/huanongying/p/7021555.htm
1、脏读:
事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:
事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,
导致事务A多次读取同一数据时,结果 不一致。
3、幻读:
系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,
但是系统管理员B就在这个时候插入了一条具体分数的记录,
当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。