百万级数据查询sql调优

产品信息表数据过百万,未来还将继续增长,之前已经做过优化,将查询时间控制在10秒以内,仍然很慢,而且随着数据的增长,查询速度肉眼可见越来越慢。

如何提升查询效率呢?

第一步:定位查询慢的原因

之前已经做过sql调优,数据列表的sql自认已经没有更多优化的地方,所以就从后台代码上看,是否是程序耽误了时间。

详细的梳理了日志之后发现,列表查询时是使用mybatis自动分页功能,而数据总数是直接在数据查询sql外围套上COUNT来查的,就是这么简单粗暴。而数据查询sql自带许多查询条件和各种join,这就导致count时无比的慢。

那么原因就定位出来了,总数count原sql过于粗糙。

第二步:对症下药

后台代码将查总数功能独立出来,count的sql单独写之后,效果立竿见影,立马快了5秒钟

但是,六七秒的查询时间仍然是太慢,毕竟count的总数需要与数据对上,所以一些查询条件与一些join也是必须的,得把这个count的sql优化一下。

怎么优化呢?想到了建索引。

此条sql涉及的主要过滤字段包括厂商id,客户id,产品类型,和修改时间,那么就建立这四个字段的索引。

建好之后再看查询效率,效果甚微,快了1秒。

使用EXPLAIN分析执行计划,发现并没有用到刚建的索引。

强制使用索引(FORCE INDEX(索引名))。

哇!效果喜人,查询时间降低到两秒以内!

至此,此次优化任务圆满完成,特此记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些海量数据HiveSQL调优案例: 1. 数据分区:对于大型数据集,可以将其分为更小的分区。这将使查询更快,因为只有需要的数据才会被加载。可以使用HiveSQL的PARTITION BY子句来进行分区。 2. 压缩数据:使用Hadoop的压缩功能可以降低存储和I/O成本。可以使用Snappy或Gzip等压缩算法对数据进行压缩。 3. 使用Bucketing:Bucketing是一种将数据分配到预定义的桶中的技术。这可以加快查询速度,因为查询只需要扫描与查询条件匹配的桶。 4. 使用索引:HiveSQL支持基于B树的索引。使用索引可以加快查询速度,但是在大型数据集上创建索引可能需要花费很长时间。 5. 适当设置集群资源:确保集群的资源(CPU、内存和磁盘)得到充分利用,可以通过调整YARN容器大小、增加节点数量等方式来实现。 6. 避免使用SELECT *:在查询时只选择需要的列,而不是使用SELECT *,可以减少数据传输和查询时间。 7. 使用Join时使用MapJoin:对于小型表,可以使用MapJoin来避免Shuffle操作,从而加快查询速度。 8. 优化数据倾斜:如果数据在某些键上倾斜,可以使用随机键或将数据分解成更小的分区来解决数据倾斜问题。 这些技术可以帮助优化HiveSQL查询,提高查询速度和效率。但需要注意的是,每个数据集都是独特的,因此需要根据实际情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值