SQL语言
表的创建,删除,修改 链接方式的区别(内链接,左外连接,右外连接,全连接),连接的条件(natural,using,on) 嵌入子查询
索引方法
顺序索引(稠密索引和稀疏索引)
顺序索引的方式和操作系统内存管理的分页机制比较相似。稠密索引就是给每一个数据块建一个指针,把指针顺序摆放在一起就是索引了。稀疏索引,要求数据块本身是聚集堆放的,找到最大的小于要查询值的指针,然后循序遍历至找到目标为止。对于文件过大的时候,索引本身就很庞大,因此又建立了分级索引。
B树索引
B树索引,实际上是分为B树索引和B+树索引两种方法。MySQL用的B+树,MongoDB用的B树。关于B数和B+树如何索引,给大家安利两篇文章,写的通俗易懂。
漫画:什么是 B- 树?
漫画:什么是 B+ 树?
为什么选择B树?
(1) 对于数据库查找,索引的文件都存在磁盘上,磁盘IO的是非常消耗时间的,因此要减少磁盘IO的次数,而B数相比于二叉树,或者其变种AVL和RD-Tree的高度更低,因此磁盘IO的次数更好;
(2) B数是平衡树,查找,删除和插入是相对稳定的。
为什么选择B+树
(1) B+树所有的数据都保存在叶节点上,查找数据都必须到达叶子节点,因此其查找效率是恒定的;
(2) B+树的叶子节点有指针指向下一个叶子节点,形成了一个链表。而叶子节点间又是排序的,因此对于范围查找只需要先找到头的位置,然后遍历链表就可以了;
(3) B+树的非叶子节点不需要存储数据,只作为索引,因此B+数的阶数可以更高,故单个节点保存的数据个数会更多,使得B+树更加矮胖,因此磁盘IO的次数会更少。
哈希索引
散列索引就比较好理解了,实际就是在哈希表中保存文件的指针。所遇到的问题和哈希表中存在的问题是相同,如何选择好的哈希函数,数据过大后如果扩容,扩容的过程中有拷贝如何提高扩容的效率。当超过了装载因子后,可以新建一个更大的哈希表,但是并不一次性拷贝全部数据,而是当要插入或删除某个数据时,就将该桶中的所有数据拷贝。
mysql引擎对比”>MySQL引擎对比
(InnoDB,MyISAM)
k
数据库的锁
(行锁,表锁,页级锁,意向锁,读锁,写锁,悲观锁,乐观锁,以及加锁的select sql方式)
隔离级别
可串行化 可重复读 已提交读 未提交读
由上到下隔离级别依次降低。都不允许脏写
事务的ACID特性
事物:构成单一逻辑工作单元的操作集合 ACID特性
(1) 原子性:要么都发生,要么都不发生;
(2) 一致性:数据保存一致性,A和B转账,必须保证转账前后A和B账户的总额不变;
(3) 隔离性:多个事务并发执行,但是实际上必须是前后执行,不能交叉;
(4) 持久性:修改后永久有效
优化
(explain,慢查询,show profile)