我刚刚开发了一个web应用程序,发现大多数mysql表都有字段,例如,is_live, can_do, required, published (以及更多)的字段类型为TINYINT,并且只接受0 or 1。我只是想知道我是否需要在这些列上创建索引,因为脚本正在使用连接,其中也包括这些列。所以问题是:
我是否也应该向这些列添加索引?
我是否应该将类型更改为其他类型?
请看,这个问题更多的是为了理解概念,而不是解决问题。
谢谢。
发布于 2009-12-22 20:09:48
我的数据库专家说,“如果你不知道查询,就不要添加任何索引”。在您的情况下,看起来您确实知道查询。所以,是的,我们可以考虑索引。如果您的数据仓库类型为系统,请创建位图索引。否则,不要创建任何索引。B树索引在这么小的基数列上是不好的。
发布于 2009-12-22 20:10:33
一般的建议是,布尔型字段的索引很少有用。
B树索引对于高基数数据(即具有许多可能值的列,其中列中的数据是唯一的或几乎唯一的)最有效。
一些数据库引擎,如Oracle和Postgres,支持Bitmap Indexes。传统上,位图索引被认为适用于性别(男性或女性)等数据,这些数据具有少量不同的值,但这些值出现的次数很多。
MySQL目前不支持位图索引,但可以使用其"index_merge“特性实现类似的功能。应该在Falcon引擎(Source)中引入位图索引。
发布于 2009-12-22 20:05:30
我怀疑这些字段是否用于连接,因为它们接受0或1作为输入。
在这种情况下,索引的主要用途是能够直接从索引中检索数据,但由于索引将相当大,因此开销很可能会使这一点无效。
然而,这里唯一有效的方法是尝试您的数据集,因为您使用的数据可能会对结果产生重大影响。
https://stackoverflow.com/questions/1945968
复制相似问题