solr mysql 多表_数据库数据太多,多表检索非常缓慢,有什么好的解决办法么?...

1、在设计之初,考虑数据增长趋势,建立合适的索引。

2、表关联的外键建立索引。

3、建立一些冗余数据,来避免 join 查询

和 @peter 所说的一样

比如两个表 deals(tb_shop_id) 和 tb_shops(wangwang, name.....) 。经常有这种需求,根据 wangwang 去查询deals 数据

一般写法

SELECT deals.*

FROM deals INNER JOIN tb_shops ON deals.tb_shop_id = tb_shops.id

WHERE tb_shops.wangwang='xxxxxx'

但是,如果在设计之初,考虑到这种需求,那么在表 deals上记录 tb_shop_id 和 wangwang,那么就不需要 join 表查询了。

只有在 tb_shops.wangwang 修改的时候同步 deals 表

如下:

SELECT deals.*

FROM deals

WHERE deals.wangwang = 'xxxxxx'

4、数据库良好的设计,一定要,所见及所得,避免复杂的查询。

比如日志表,xxxx_logs 可能会有百万或千万的数据。那么避免对这个表做任何查询。可以根据需求建立几个小的统计表。

比如,商家每天的消费情况,商家的总消费情况,所有的数据在存入 xxxx_logs 的时候,对应把数据同步到这几个小表中。

商家每日消费情况表tb_shop_day_details,商家总消费情况tb_shops_total_details

比如查看所有商家的总消费情况,只需要查询 tb_shops_total_details 不再需要从 xxxx_logs 临时计算数据,返回。

比如,要查看商家2014-11-11那一天消费的情况,那么也只需要

SELECT *

FROM tb_shop_day_details

WHERE st_date = '2014-11-11'

所有数据所见及所得,那么这种情况就不需要 JOIN 表操作。

5、将多表的数据查询,提前汇总到一个表。在真正需要查询的时候,从该汇总表中查询。

6、读写分离。在主库写,从库读。

7、将多表 join 查询,改成几条简单的 SQL 查询,最后在组合数据。

8、如果觉得上述的太麻烦,使用 solr 吧,但是原理是一样的,将预计要查询的汇总在一个表。

其实多表查询慢,第一、没有建立合适的索引,第二,存在不良的表结构设计。

在系统初期,没有做好设计。导致数据增长不可控,不良的表结构设计,肯定会导致多表查询慢。

要解决多表查询缓慢的问题,从修改表结构开始,一步一步优化,肯定能达到预期的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值