最佳实践—如何高效使用IN查询

简介: 本文将介绍如何在PolarDB-X中做IN查询时,选择最佳的Values个数。

功能介绍

实际场景中经常需要根据一些常量指标做IN查询,其中IN的字段是分区键。例如在电商场景中,所有订单都会记录到订单表Order,此表按照订单ID进行拆分,一个买家经常会根据已购买的订单列表,查询这些订单的具体信息。假设用户已购买的订单数是2,那么会产生2个值的IN条件查询,理论上查询会路由到两个2分片。查询SQL示例:


SELECT * FROM ORDER WHERE ORDER_ID IN (id1,id2)

随着用户购买的订单数增加,查询订单信息的IN值数量也会增加,这样一次查询很可能会路由到所有的分片,导致RT变高。下图展示了IN值数量、扫描分片数和RT之间的关系。

70..png

功能介绍

实际场景中经常需要根据一些常量指标做IN查询,其中IN的字段是分区键。例如在电商场景中,所有订单都会记录到订单表Order,此表按照订单ID进行拆分,一个买家经常会根据已购买的订单列表,查询这些订单的具体信息。假设用户已购买的订单数是2,那么会产生2个值的IN条件查询,理论上查询会路由到两个2分片。查询SQL示例:


SELECT * FROM ORDER WHERE ORDER_ID IN (id1,id2)

随着用户购买的订单数增加,查询订单信息的IN值数量也会增加,这样一次查询很可能会路由到所有的分片,导致RT变高。下图展示了IN值数量、扫描分片数和RT之间的关系。

80..png

比对测试

在兼顾RT和吞吐的场景下,确定合理的IN查询的值的数量。在规格2×16C64G的节点,针对一张分表数量为64,分表记录数为百万级别的表在不同值数量、不同并发下做测试。在内核版本5.4.8-16069335(包含)之后针对IN查询进一步完善了动态裁剪分表的能力,下发的物理SQL也会裁剪掉多余的Values,下面是比对测试的结果。

  1. 在不同并发下,不同Values值数量下测试,开启IN查询动态裁剪能力下,查看RT变化。90.png
  2. 在不同并发下,不同Values值数量下测试,开启IN查询动态裁剪能力下,查看吞吐变化。100.png
  3. 在不同并发下,不同Values值数量下测试,关闭IN查询动态裁剪能力下,查看RT变化。111.png
  4. 在不同并发下,不同Values值数量下测试,关闭IN查询动态裁剪能力下,查看吞吐变化。112.png
  5. 通过测试对比,可以得到以下结论:
  • 兼顾RT和吞吐时,建议IN的值的数量在8~32之间,基本对齐分布式Parallel Query的默认并发度(单节点的CPU内核数)。
  • 在内核版本5.4.8-16069335(包含)之后,在开启IN查询的动态裁剪能力下,吞吐和RT都有明显的优势,推荐您将内核版本升级至5.4.8及以上版本。
相关文章
|
程序员 Android开发 开发者
Aab(Android App Bundle)测试与安装
Aab(Android App Bundle)测试与安装
1459 0
|
11月前
|
SQL 缓存 PHP
PHP框架详解 - symfony框架
Symfony框架凭借其灵活性、高性能和强大的社区支持,成为PHP开发领域的重要工具。无论是初学者还是资深开发者,都可以通过Symfony快速构建高质量的Web应用程序。通过深入理解Symfony的核心组件和最佳实践,开发者可以充分发挥其优势,提升开发效率和代码质量。
249 24
|
机器学习/深度学习 人工智能 自然语言处理
人工智能浪潮之下,机器学习的未来展望
在数字化时代,人工智能(AI)已成为推动技术革新的核心力量。特别是机器学习(ML),作为AI的子集,它的发展不仅重塑了数据处理的方式,还为解决复杂问题提供了新途径。本文将探讨机器学习的现状与未来趋势,包括深度学习、自然语言处理等领域的进展,以及面临的挑战和潜在的解决方案。通过深入分析,旨在为读者揭示机器学习在未来社会中的角色和影响。
313 0
|
机器学习/深度学习 人工智能 人机交互
ICML 2024:AI也会刷抖音!清华领衔发布短视频全模态理解新模型
【8月更文挑战第20天】SALMONN是由清华大学在ICML 2024发表的一种开创性的多模态模型,专为短视频全模态理解设计。它集成了预训练文本大模型与语音、音频编码器,能直接处理多样音频输入,在自动语音识别、翻译、情绪识别等任务中表现出色。SALMONN展现了令人兴奋的新能力,如翻译未训练语言和基于语音的问答。通过少样本激活微调,可进一步发掘其跨模态潜能。尽管如此,模型的计算成本和泛化能力仍是待克服的挑战。SALMONN标志着AI在具备通用听觉理解方面迈出重要一步。[论文链接: https://arxiv.org/abs/2310.13289]
461 3
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
量化交易系列【5】:如何快速的将日K线数据转换为周K线及月K线数据,神奇的resample函数
|
安全 程序员 网络安全
网络安全那些梗
网络安全领域的梗往往以幽默、讽刺或夸张的方式反映了该领域的某些现象、挑战或误解。以下是一些网络安全相关的梗
534 4
|
数据采集 数据库连接 API
直连同步的优缺点
【6月更文挑战第19天】直连同步的优缺点
487 6
|
前端开发 JavaScript API
强强联手打造桌面应用新标杆:Angular与Electron的完美融合——从环境搭建到通信机制,全面解析构建跨平台应用的最佳实践与技巧
【8月更文挑战第31天】随着Web技术的进步,开发者们越来越多地采用Web技术来构建桌面应用程序。通过结合使用开源框架Electron及前沿的前端框架Angular,开发者能充分利用JavaScript、HTML和CSS打造出高性能且易维护的跨平台桌面应用。本文将详细介绍如何搭建基于Angular与Electron的开发环境,包括创建Angular项目、安装Electron及相关依赖、配置Electron主进程以及实现Angular应用与Electron间的通信等关键步骤,并最终将应用打包成多平台可执行文件,为读者提供了一套完整的解决方案以快速入门并实践这一强大技术组合。
677 0
|
负载均衡 监控 Cloud Native
FinOps
“【5月更文挑战第25天】”
502 5
|
存储 人工智能 算法
探索AI在后端开发中的应用与挑战
随着人工智能技术的飞速发展,AI在后端开发领域扮演着越来越重要的角色。本文将深入探讨AI在后端开发中的应用现状和面临的挑战,分析其带来的影响与发展趋势。
822 1