关于数据库查询

来源:3-8 【边学边做】网关启动程序的开发

七十亿分之一_

2019-04-05

张老师,我想问下。在数据库太大的情况下,一般都会做分库分表处理对吧,但是如果本身项目中的sql就很复杂,比如关联5 6张表才能查询出结果,无法分库分表,该怎么处理?因为不分,数据量大了,又查询特别慢。希望老师能回答下,非常感谢

写回答

1回答

张勤一

2019-04-05

同学你好:

    首先,如果不是数据库中的表特别大(这个特别大也是看数据量,通常情况下,如果表只有千万行,且列不超过10,都是普通的数据类型),不需要分库分表。因为分库分表是需要改写业务代码(因为一张表变成了多张表,一个库变成了多个库)的。

    如果当前的表已经特别大了,那么,最好不要尝试去添加索引。因为添加索引的时候,会锁表,造成当前的线上业务不可写。而且,表越大,建索引的过程就越长。

    这时,可以考虑把查询出来的常用数据放入缓存(例如 Redis)中,因为通常情况下,很久以前(冷数据)的数据几乎不会被查询使用了。但是,你这里说,需要关联 5、6 张表才能查询出结果,这个业务逻辑是有点太复杂了。我对这种情况的建议是重新梳理业务逻辑,一次查询,关联的表不要超过 3 个。

    总结下来,我给出的建议是:

    1. 不要尝试给大表添加索引,这个操作过程很慢

    2. 梳理业务逻辑,关联 5、6 张表的查询太复杂了,减少关联表

    3. 把查询出来的数据缓存起来(设置过期时间),不要总是查询数据库

    4. 如果还是会影响效率,可以考虑分表(分库通常不会做),按照一个固定键(例如 userId)分表,查询的时候,按照 userId 做路由再去定位对应的表去查询。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
0

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2136 学习 · 927 问题

查看课程