首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在mysql表中的tinyint字段类型上创建索引吗?

问我应该在mysql表中的tinyint字段类型上创建索引吗?
EN

Stack Overflow用户
提问于 2009-12-22 20:01:18
回答 5查看 7.6K关注 0票数 9

我刚刚开发了一个web应用程序,发现大多数mysql表都有字段,例如,is_live, can_do, required, published (以及更多)的字段类型为TINYINT,并且只接受0 or 1。我只是想知道我是否需要在这些列上创建索引,因为脚本正在使用连接,其中也包括这些列。所以问题是:

我是否也应该向这些列添加索引?

我是否应该将类型更改为其他类型?

请看,这个问题更多的是为了理解概念,而不是解决问题。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-22 20:09:48

我的数据库专家说,“如果你不知道查询,就不要添加任何索引”。在您的情况下,看起来您确实知道查询。所以,是的,我们可以考虑索引。如果您的数据仓库类型为系统,请创建位图索引。否则,不要创建任何索引。B树索引在这么小的基数列上是不好的。

票数 7
EN

Stack Overflow用户

发布于 2009-12-22 20:10:33

一般的建议是,布尔型字段的索引很少有用。

B树索引对于高基数数据(即具有许多可能值的列,其中列中的数据是唯一的或几乎唯一的)最有效。

一些数据库引擎,如Oracle和Postgres,支持Bitmap Indexes。传统上,位图索引被认为适用于性别(男性或女性)等数据,这些数据具有少量不同的值,但这些值出现的次数很多。

MySQL目前不支持位图索引,但可以使用其"index_merge“特性实现类似的功能。应该在Falcon引擎(Source)中引入位图索引。

票数 21
EN

Stack Overflow用户

发布于 2009-12-22 20:05:30

我怀疑这些字段是否用于连接,因为它们接受0或1作为输入。

在这种情况下,索引的主要用途是能够直接从索引中检索数据,但由于索引将相当大,因此开销很可能会使这一点无效。

然而,这里唯一有效的方法是尝试您的数据集,因为您使用的数据可能会对结果产生重大影响。

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

https://stackoverflow.com/questions/1945968

复制
相关文章

相似问题

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