一、mysql的基本知识
1.关系型数据库管理系统
2.开放源码数据库
3.良好的内存管理机制,尤其是内存泄漏的管理,通过了Purify的严格测试
4.使用多线程的技术,可充分发挥系统的特点,避免在SMP系统中出现仅使用单CPU的现象
5. 对磁盘表的管理采用B树加密及索引的技术,为我们快速访问数据提供了可能
6.免费
https://www-31.ibm.com/support/techdocs/cn/faqhtmlfaq/2011073000001.htm
二、索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
0.为什么索引会提高搜索速度?
因为索引是使用B+树进行实现,从而查找效率大幅度提高。
1.索引的分类:
1).聚簇索引(聚集索引)和非聚簇索引
2).普通索引和唯一性索引
3).单个索引和复合索引
2.索引(B+树)的原理:
3.索引为什么选用B树这种数据结构?
一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。下面先介绍内存和磁盘存取原理,然后再结合这些原理分析B-/+Tree作为索引的效率。
4.B树和B+树有什么区别?
1). B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
2). B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
3).B+树支持range-query(区间查询)非常方便,而B树不支持
5.B+树的优点?
1).非叶子节点不会带上ROWID,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。
2).叶子节点之间通过指针来连接,范围扫描将十分简单,而对于B树来说,则需要在叶子节点和内部节点不停的往返移动
6.聚集索引和非聚集索引区别?
聚集索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序的一种索引。B+Tree的数据域存储的内容为实际数据的值
非聚集索引,该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同的一种索引。B+Tree的数据域存储的内容为实际数据的地址
聚集索引适用于:查询数据库内一个范围的数据;但是不应该用在经常被修改的索引列。
非聚集索引适用于:经常修改的索引列;大数目的不同值。
动作描述 | 使用聚集索引 | 使用非聚集索引 |
列经常被分组排序 | 应 | 应 |
返回某范围内的数据 | 应 | 不应 |
一个或极少不同值 | 不应 | 不应 |
小数目的不同值 | 应 | 不应 |
大数目的不同值 | 不应 | 应 |
频繁更新的列 | 不应 | 应 |
外键列 | 应 | 应 |
主键列 | 应 | 应 |
频繁修改索引列 | 不应 | 应 |
7.hash索引的缺点?
索引存放的是hash值,所以仅支持 < = > 以及 IN 操作
hash索引无法通过操作索引来排序,因为存放的时候经过hash计算,但是计算的hash值和存放的不一定相等,所以无法排序
不能避免全表扫描,只是由于在memory表里支持非唯一值hash索引,就是不同的索引键,可能存在相同的hash值
如果哈希碰撞很多的话,性能也会变得很差
哈希索引无法被用来避免数据的排序操作
8.数据库的事务的特性?
原子性:指事务是一个不可分割的工作单位,这组操作要么全部发生,否则全部不发生。
一致性:在事务开始以前,被操作的数据的完整性处于一致性的状态,事务结束后,被操作的数据的完整性也必须处于一致性状态。
隔离性:系统必须保证事务不受其他并发执行的事务的影响。
持久性:一个事务一旦成功提交,它对数据库的改变必须是永久的,即便是数据库发生故障也应该不回对其产生任何影响。
9.Mysql的两大数据库引擎innodb和myiasm之间的区别和联系?
MyIASM:MyIASM引擎是mysql数据库的默认引擎,是ISAM引擎的扩展格式。MyIASM引擎不支持事务,也不支持行级锁。它主要是强调了快速读取的操作,所以说,你在更新和插入的时候会比较慢。而且它不支持行级锁,而是表级锁。这样的话,他的并发性较低。MyIASM锁:表级锁。分为表共享读锁和表独占写锁。
INNODB引擎:innodb引擎相对于Myiasm引擎来说,它主要是针对的是事务处理等高级数据库功能。且他支持行级锁,提高对并发的处理。但是相对于MyIASM引擎来说,它的效率相对较低。INNODB锁:包括行级锁和表级锁。而行级锁是通过索引来进行加锁的,否则的话就使用的是表级锁。
他们之间的区别:
1.前者是非事务安全,后者是事务安全;
2.前者是锁的粒度是表级锁;后者是行级锁;
3.前者在效率上面相对较高;后者较低
4.前者支持全文索引;后者不支持
5.前者表保存为文件形式,跨平台性能更强
6.前者是非聚集索引;后者是聚集索引
两者应用场景:
MyIASM引擎:执行大量的select操作,以及管理非事务表的时候。比如一些小型的web应用。
INNODB引擎:要求支持事务,表更新相当频繁,并发性较高的。现在的大部分应用都是该引擎。