暂无图片
MYSQL SQL索引优化
我来答
分享
佳佳
2021-08-03
MYSQL SQL索引优化

desc SELECT * FROM table_name WHERE a IN (0,2,3) and b='xxx’and c=0 AND EXECUTE_TIME<=NOW();

索引1:
alter table table_name add index idx_dba(a,b,c,EXECUTE_TIME);
索引2:
alter table table_name add index idx_dba2(b,c,EXECUTE_TIME,a);

最后是走了索引2,但是a列的过滤性更改,是因为IN的原因,所以没走索引1吗?

我来答
添加附件
收藏
分享
问题补充
8条回答
默认
最新
薛晓刚

你distinct一下有多少个A,多少个B。
应该你的B更加多。

暂无图片 评论
暂无图片 有用 0
打赏 0
张小帅

改成union

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳

SELECT count() FROM table_name WHERE a IN (0,2,3); 【111620】
SELECT count(
) FROM table_name WHERE b =‘xxx’; 【573929】

a的过滤性更好。

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳
升级问题到: 潜在风险
暂无图片 评论
暂无图片 有用 0
打赏 0
柚子身上依

把第二个索引删除后看是否走第一个索引呢?

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳

把第二个索引删除后看是否走第一个索引呢?
回复:删了也不会走,一般把条件为IN的列放在索引首列,会走索引吗?

暂无图片 评论
暂无图片 有用 0
打赏 0
吴杰克

in改写成union all

暂无图片 评论
暂无图片 有用 1
打赏 0
chengang

因为in其实就是条件or 优化器估算A的成本会比A大所以还是B更好

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏