写点什么

【YashanDB 知识库】复合索引下 in 大量参数查询性能慢

作者:YashanDB
  • 2024-12-20
    广东
  • 本文字数:544 字

    阅读完需:约 2 分钟

本文内容来自 YashanDB 官网,原文内容请见https://www.yashandb.com/newsinfo/7802945.html?templateId=1718516


【标题】复合索引下 in 大量参数查询性能慢

【关键字】复合索引 in 大量参数

【问题描述】

测试表数据量 200w,表结构如图,且在 ID 和 PHONE 字段上创建了复合索引



测试 SQL 为:

复合索引下in大量参数查询性能慢首页  ꁇ  复合索引下in大量参数查询性能慢【标题】复合索引下in大量参数查询性能慢
【关键字】复合索引 in 大量参数
【问题描述】
测试表数据量200w,表结构如图,且在ID和PHONE字段上创建了复合索引
output
测试SQL为:
select name,sum(id) from test1119 where id > 50000 and phone in (...) group by name;
且in中的参数大于300个
复制代码


执行时间:



且使用 no_index_ffs 的 hint 也无法达到优化

【问题原因分析】

检查执行计划可知,计划中先 access ID>50000 的区域,再用 filter 去过滤 in 大量参数的场景,整体性能较差



【解决/规避方法】

先将原本的复合索引设为 invisible。

新建复合索引 IND_TEST1119_PHONE_ID,将需要用 in 大量过滤的字段放在复合索引的前面。

alter index IND_TEST1119_ID_PHONE invisible;
create index IND_TEST1119_PHONE_ID on TEST1119(PHONE,ID);
复制代码


检查执行计划,先 access 来过滤,复合预期



当前执行时间:



【影响范围】当前所有版本

【修复版本】-

发布于: 刚刚阅读数: 4
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB知识库】复合索引下in大量参数查询性能慢_数据库_YashanDB_InfoQ写作社区