数据库

位图索引

所谓位图索引,就是用一个二进制向量表示一张表中所有数据的某个属性。如一张User表中所有人的性别,或者是User表中所有人的已婚状况。像这种只有两个(或几个)固定值的属性,即使使用B树索引,还是需要取出一半的数据,因此并不能显著地提升效率

使用位图索引的好处是,可以通过对两个索引进行and操作来快速地找到同时满足两个属性的样本。如要找出User中所有的未婚男性,只需要把性别和已婚状况两个位图索引做and操作,就能快速地得到结果。

位图索引适用于那种只有几个固定值而且不会频繁更新的列。


MySQL数据库引擎有几种?

ISAM、MYISAM、HEAP、INNODB、BERKELEYDB。


MYISAM 和 INNODB 有什么区别?分别适用于什么情况?

INNODB 支持事务、外键和行级锁,MYISAM 不支持。不过,INNODB 不支持 FULLTEXT 索引,也不保存表具体的行数。

INNODB 比较适合更新比较频繁,或者是要求事务的场景。而 MYISAM 比较适合查询频繁、不要求事务和频繁使用count 的场景。


INNODB 的行级锁什么时候有效?什么时候无效?

只有在 WHERE 判断中是主键的时候有效,其他情况同样会锁全表。


INNODB 和 MYISAM 的索引是怎么实现的?

INNODB 和 MYISAM 的索引都是基于 B+ 树实现的。两者的区别在于,MYISAM 主键索引和辅助索引记录的都是每条数据的地址。而 INNODB 主键索引记录的就是数据本身,辅助索引记录的是主键。因此 INNODB 使用辅助索引需要对主键进行二次索引。所以, 使用 INNODB 的时候应尽量把主键定义得小一些。


B+树、B-树、B*树有什么区别?

B+树与B-树的区别在于:B-树的关键字分布在整棵树中,且一个关键字只出现一次;而B+树中所有关键字都在叶子节点出现,且可以出现多次。另外,B+树为所有叶子节点增加了链指针,且要求非叶子节点子树指针与关键字个数相同。B*树为所有非根非叶子节点也添加了指向兄弟的指针。


INNODB 和 MYISAM 的缓存有什么异同?

INNODB 和 MYISAM 的缓存都是基于LRU算法实现的。区别在于,MYISAM 的缓存 Key Cache 只缓存索引,而 INNODB 的缓存 buffer pool 不仅缓存索引,还缓存数据。INNODB 通过存储日志把内存数据同步到磁盘(因为存储日志是连续存储,速度快;读写数据是随机读写,速度慢)。如果条件允许,可以开辟尽量大的空间作为 buffer pool,这样系统的性能更接近内存数据库。


数据库的锁有几种?

三种。共享锁(S锁,只进行读操作时使用的锁,数据上存在共享锁时不得被更改,以单独去完成马上释放共享锁)、排他锁(X锁,可以防止资源的并发访问,其他事务既不能更改也不能读取上面有排他锁的资源)、更新锁(U锁,一次只有一个事务可以获得某资源的更新锁。如果事务对资源进行更新,则转换为排他锁。若仅进行读取则转换为共享锁。)。


更新锁和排他锁的区别是什么?

更新锁的存在主要是为了防止事务之间发生死锁。事务在修改数据时,首先会获取该资源的共享锁,然后在更改时转换为排他锁。如果两个事务都获取了共享锁而等待另一个事务释放共享锁,那么就会发生死锁。由于更新锁一次只可以被一个事务获取,因此避免了这种死锁的发生。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值