阿松嘚嘚嘚-数据库篇3-查询优化不简单(上)

话说阿松到了老于家里,新鲜劲果然没两天,就又开始咸鱼一样的生活了,天天葛优躺,可惜饭店不开门点不了外卖,不然就差小烧烤了。

这天,阿松学校说让在网上选课,阿松终于提起来了精神头,坐到了电脑前干点和自己相关的事情了。

老于:“哎呦,不简单啊,终于想起来自己是个学生了啊”

阿松:“你别说,都说时间是让人忘记伤痛最好的良药,我感觉,时间也是让人忘了自己是谁的变傻喷雾,这不,辅导员在群里发了个通知,让大家选课,我才想起来我居然还是个学生!”

老于:“所以啊,还是上学好啊。话说,你坐这这么久了,课还没选完?”

阿松:“别提了,课程列表加载不出来,太慢了,估计一会就是报500”

老于:“500可真是让程序员怕,用户恨的代号。话说,你觉得问题出在哪?”

阿松:“你看,页面可以加载局部,说明服务没问题,课程列表加载不出来,说明查询数据这块效率太低”

老于:“嗯,可以这么理解。那你觉得该怎么做呢?”

阿松:“吃完饭我再登进去看看,咱们中午吃啥?”

老于:“你这家伙,我问的是如果你来做数据库查询,你该怎么优化,谁问你吃饭的事了。”

阿松:“哎呦,我就开开玩笑,别当真。我肯定先看看他们写的SQL怎么样啊”

老于:“你说的只是一方面,其实SQL本身只是查询优化的一部分,不过我们可以管中窥豹来看看全局,你说SQL该怎么优化?”

阿松:“其实我之前用到的经验就是IN和EXISTS,前表大用IN,后表大用EXISTS,还有就是表要建立索引,能先用WHERE过滤数据的化就先过滤,包括你那个Redis缓存可以把热数据存在内存里”

老于:“你说的都对,但是都是零散的,其实要是想优化查询过程,有一个套路”

阿松:“真是无处不在的套路,那你说说有几种路?”

老于:“第一步,先把表设计优化了,SQL查询的数据模型在哪体现,数据的规范从哪里指定,当然是表,所以要先把表优化一下。”

阿松:“我知道了,三大范式和反范式结合起来使用对不对”

老于:“对,当然还有更细节的,比如字段的类型,能用数值用数值,数值型比字符型占据的存储空间更小,查询起来效率更高。”

阿松:“这个很容易明白”

老于:“第二步,逻辑查询的优化,这个就是像你说的IN/EXISTS,尽量用WHERE先过滤数据,当然有些东西数据库也会替你完成,比如调整SQL里语句的顺序”

阿松:“我记得一般数据库都有优化器,像Oracle和MySQL都有”

老于:“解析器、优化器、执行器,这三件套他俩都有。Oracle还有共享池,类似于缓存。MySQL8.0之前也有缓存,但是后来就弃用了,毕竟数据库增删改太多,缓存很容易失效。”

阿松:“话说,有逻辑查询优化,就得有物理查询优化吧?我感觉在计算机里,逻辑和物理就是一对孪生兄弟”

老于:“没错。可以理解为逻辑是我们人能看到的,物理是机器能看到的。第三步,就是物理查询优化,这个地方就是合理建立索引了”

阿松:“索引怎么个合理法?能建我就都给它建上不行么?”

老于:“索引是通过B+树的形式,存储在硬盘上的。你把索引建太多了,对空间也有影响,而且索引太多,筛选时间未必会减少。”

阿松:“那我什么时候需要创建索引呢?”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值