首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WHERE或GROUP BY中选择9列。有没有更好的方法来索引多个列,而不是几乎每个排列都使用复合索引?

在WHERE或GROUP BY中选择9列。有没有更好的方法来索引多个列,而不是几乎每个排列都使用复合索引?
EN

Stack Overflow用户
提问于 2020-01-23 01:49:13
回答 2查看 43关注 0票数 0

我在一个包含5亿行的表中有9列,我将在其中执行SELECT查询,所有列可能在WHERE或GROUP BY中,也可能不在其中。

例如: Columns -> (A, B, C, D, E, F, I, J, K) query ->

代码语言:javascript
复制
SELECT * 
FROM table WHERE A = 'x' AND J = 'y' GROUP BY B, E, K

索引和优化数据库的最佳方法是什么?我必须为每个列的排列执行多列索引(复合索引)吗?

对于3列,我知道我可以做:(a,b,c),(b,c),( c),(a,c),但是9列呢?

EN

回答 2

Stack Overflow用户

发布于 2020-01-24 06:26:06

你不能达到预期的目标。一些可能的替代方案:

  • 发现哪些列是最常用的;然后创建最多10个索引,每个索引最多3列。如果你帮助了最常见的组合,那么它可能是“足够好的”。
  • 用"Columnstore".
  • Look查看MariaDB中的插件包。
票数 1
EN

Stack Overflow用户

发布于 2020-01-23 02:14:30

首先,group by不适合使用select *。幸运的是,MySQL不再允许这种语法(默认情况下)。

如果您打算:

代码语言:javascript
复制
SELECT B, E, K
FROM table
WHERE A = 'x' AND J = 'y'
GROUP BY B, E, K;

最好的索引是在(A, J, B, E, K)上;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59865554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档