面试的时候,经常会被面试官问到数据库优化方面的知识点。今天来总结一下数据库优化应该经过几个阶段,我觉得这样回答是一个比较优的答案。
0x01:SQL优化及应用程序优化
一个系统总是从小到大,所以在系统还是小型系统的时候。首先应该注重表的设计,合理使用主键、外键、索引;字段选用合适的数据类型、合适的数据长度。使用SQL考虑索引什么情况是有效的;什么时候是失效的,避免使用索引失效的SQL。
另外应该程序优化也很重要,比如能批量执行SQL,就不要在程序中循环执行SQL。使用各种框架的缓存也非常重要,例如,如果使用MyBatis时,就好合理使用MyBatis的一级缓存和二级缓存;使用Hibernate时,就好合理使用Hibernate的一级缓存和二级缓存等。
0x02:数据库读写分类
当业务量达到一定程度时,可以考虑数据库的读写分离方案,让读写业务分离。但是一定要考虑如何解决写库与读库的数据一致性问题。目前,很多开源的读写分离服务和框架。主要基于如下两种方案:
0x03:引入缓存数据库
NoSQL数据库目前也是大行其道,特别Redis数据库。例如使用Redis缓存服务器,可以把一些常用、不经常变化的数据缓存到内存。在内存读取数据的数据要比在硬盘读取的速度不知道快多少倍。引入缓存数据库增加了系统的复杂度,另外还有考虑关系型数据库与NoSQL数据库数据一致性的问题。
0x04:垂直拆分
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:
这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方...
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里...
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可...
本文实例讲述了正则表达式中的操作符及说明。分享给大家供大家参考,具体如下: ...
橡皮擦一个逗趣的互联网高级网虫。 观前提醒本篇文章涉及知识点巨大建议先收藏再...
从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很...
1 . 目标 演示下图的git reset 各选项的效果。 2. Git Reset操作说明 图中说明:...
Greediness(贪婪型):最大匹配 X、X*、X+、X{n,} 是最大匹配。例如你要用 “....
3月22日消息 外媒 Winfuture 报道,此前微软面向 Insider 预览用户公布了 Window...
2月23日消息 据外媒 Windows Latest 今日报道,借助 Windows 10 Sun Valley 更新...