MySQL-索引类型优缺点
MySQL 主要集中索引类型:FULLTEXT,HASH,BTREE,RTREE
1. FULLTEXT
即为全文索引,目前只有MyISAM支持。不过目前只有 CHAR,VARCHAR,TEXT列上 可以创建全文索引。
2. HASH
由于 HASH 的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。
HASH索引 可以一次定位,不需要像树形索引那样逐层查找,因此效率极高。但是,这种高效是有限制的,即只有在 “=” 和 “in” 条件下高效,对于范围查询、排序及组合索引仍然效率不高。
3. BTREE
BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口 root开始,依次遍历 node,获取leaf这是MySQL里默认和最常用的索引类型。
4. RTREE
RTREE在MySQL 很少使用,仅支持 geometry数据类型,支持该类型的存储引擎只有 MyISAM、DBb、InnoDB、NDb、Archive几种。
相对于BTREE,RTREE的优势在于范围查询。
行锁表锁:
简述: InnoDB行锁是通过索引上的索引项加锁来实现的, 这一点MySQL和Oracle不同, 后者是通过在数据库中相对应的数据行加锁来实现的. InnoDB这种行锁实现特点意味着: 只有通过索引条件检索数据, InnoDB 才使用行级锁, 否则, InnoDB将使用表锁!
1. 在不通过索引条件查询的时候, InnoDB 确实使用的是表锁, 而不是行锁.
2. 由于MySQL的行锁是针对索引加的锁, 不是针对记录加的锁, 所以虽然访问不同的行记录. 但是如果使用的是相同的索引键, 时会出现锁冲突的. 应用设计的时候要注意这一点