数据库知识点比较杂
个人包含以下几方面
1,基础语法
2,索引
3,事务
4,锁
基础语法需要自己多练就可以了
索引
索引是什么
索引是一种排好序的数据结构,目的是提高查找效率。
索引用的树B+树
可以看这个博客写的特别好
https://www.cnblogs.com/nullzx/p/8729425.html
为什么要用b+树 不用hash 和二叉树 和b树
与二叉树相比
二叉树相比于顺序查找的确减少了查找次数,但是在最坏情况下,二叉树有可能退化为顺序查找
与B树相比
B树在提高IO性能的同时,并没与解决元素遍历时效率低下的问题,正是为了解决这个问题,B+数应运而生。B+数只需遍历叶子节点即可实现整棵树的遍历,而B树必须使用中序遍历按序扫库,B+树支持范围查询非常方便。这才是数据库选用B+树的主要原因
与hash比
hash表只能匹配是否相等,不能实现范围查找,当需要按照索引进行order by时,hash值没办法支持排序,当数据量很大时,hash冲突的概率也会非常大。
什么时候用索引
1,主键自动建立唯一索引
2,频繁操作的数据要建索引
3,频繁更新的不是后建立索引
4,where 中用不到的字段一般不创建索引
5 ,外键关系,建立外键索引
6,查询和分组的字段创建索引(因为分组先排序)
什么时候不建立
重复且平均分配的建索引作用不大。
索引有哪些
唯一索引(UNIQUE):不允许两行具有相同的索引值(创建了唯一约束,系统将自动创建唯一索引)
主键索引:主键索引要求主键中的每个值是唯一的,(创建主键自动创建主键索引)
聚集索引(CLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序相同,表中只能包含一个聚集索引,主键列默认为聚集索引
非聚集索引(NONCLUSTERED):表中各行的物理顺序与键值的逻辑(索引)顺序不匹配,
组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建一个字段,索引才会被使用。使用组合索引时遵循最左前缀。
什么事最左前缀
索引安装最左原则,如果(a,b,c)创建索引只有当查询条件为(a)(a,b)(a,b,c)查询的时候索引有效。因为索引和group by a,b 类似都是先进行a,排序然后对b排序,where 不影响最左排序。
索引是不是越多越好
是并不是越多越好,原因如下:
1。虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行插入,更新和删除。因为更新表时,不仅要保存数据,还要保存一下索引文件.
2。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。