大数据量查询优化(限制数量连表查询)

当大表之前的连表查询
如果业务是可以限制数量的话
我们的连表逻辑应该是获取限制数量的主表结果集再去连表查询出相关的数据
而优化前这种是连表完成后再去完成 group by、ORDER BY、LIMIT
当命中的数据量是百万级别的时候 我们可以看业务限制数据量来提高查询效率

数据量大的时候我们会进行分表操作 会按照分表条件例如时间拆分主表
如果我们还需要rpt_visit_page的多个分表的结果数据
此时我们可以放弃每个分表连表查询获取相关数据 而是在经过分表的多表结果排序最后确定返回的2000再去获取相关的关联表数据
这个看具体的业务

优化前

  select url_id,SUM(page_views) page_views,SUM(unique_visitors) unique_visitors,
        SUM(bounce) bounce,SUM(total_duration) total_duration,url_reference.url page_url,url_reference.title
        page_title
        from
        rpt_visit_page  a
        left join url_reference on a.url_id=url_reference.hashcode
        where
            a.channel_id =1
		AND  a.report_type = 1 
		AND  a.report_date >= '2020-05-17 00:00:00' 
		AND  a.report_date <= '2020-07-17 00:00:00' 
        group by a.url_id
        ORDER BY  page_views DESC 
		LIMIT 2000 

优化后

EXPLAIN SELECT
	a.url_id,
	a.page_views,
	a.unique_visitors,
	a.bounce,
	a.total_duration,
	url_reference.url AS page_url,
	url_reference.title AS page_title 
FROM (
	SELECT
		url_id,
		SUM( page_views ) AS page_views,
		SUM( unique_visitors ) AS unique_visitors,
		SUM( bounce ) AS bounce,
		SUM( total_duration ) AS total_duration
	FROM
		rpt_visit_page 
	WHERE
		channel_id = 1 
		AND report_type = 1 
		AND report_date >= '2020-05-17 00:00:00' 
		AND report_date <= '2020-07-17 00:00:00' 
	GROUP BY
		url_id 
	ORDER BY
		page_views DESC 
		LIMIT 2000 
	) a
	LEFT JOIN url_reference ON a.url_id = url_reference.hashcode

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当需要处理大数据查询时,MyBatis-Plus提供了一些优化策略和特性,以提高查询性能和减少资源消耗。下面是一些处理大数据查询的建议和技巧: 1. 分页查询:使用分页查询可以限制每次查询返回的结果数量,减轻数据库的压力。可以使用`Page`对象或者`IPage`接口来进行分页查询。 ```java IPage<User> page = new Page<>(1, 10); // 每页10条记录 page = userService.page(page); List<User> userList = page.getRecords(); ``` 2. 批操作:如果需要批插入或更新大数据,可以使用`insertBatchSomeColumn()`或`updateBatchById()`方法,这些方法可以批执行SQL语句,减少与数据库的交互次数,提高效率。 ```java List<User> userList = ...; // 大待插入的数据 userService.saveBatch(userList, 100); // 每批次插入100条记录 ``` 3. 使用分页查询并行处理:对于非关联查询,可以将大数据集合按照页数进行拆分,并发进行多线程或异步处理,以加快查询速度。 4. 使用合适的索引:在数据库创建适当的索引可以加速查询操作。根据具体的查询需求和字段特点,选择合适的字段创建索引。 5. 执行性能分析和优化:通过使用MyBatis-Plus的性能分析插件,可以查看SQL执行的时间和消耗的资源,从而进行性能优化。 ```yaml # application.yml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl interceptor: - com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor ``` ```java @Configuration public class MyBatisPlusConfig { @Bean public PerformanceInterceptor performanceInterceptor() { return new PerformanceInterceptor(); } } ``` 这些是一些处理大数据查询的常见策略和技巧,根据具体情况可以选择适合的方法来提高查询性能和效率。希望对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值