如何在MySQL中为二进制列建立索引,还是应该拆分成两个表?

时间:2018-09-12 08:49:30

标签: mysql indexing

我正在尝试为二进制列建立索引。它可以是1(代表300万行),也可以是0(通常代表100行)。

使用MySQL的解释,即使我在查询中使用USE INDEX,它似乎也完全忽略了我创建的索引。

难道根本不可能像这样索引一列?这是否意味着任何依赖于它的查询都需要全表扫描?

我可以看到一种解决方案是将数据分为两个表,这将基于业务需求是合理的。

还有其他选择吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

当该值为1(公共值)时,很多时候会忽略索引,而只是扫描表,扔掉一些不适用的行。

当该值为0(非常罕见的值)时,将使用索引,并且该索引非常有效。但是,此可能仅在您明确地说出WHERE col = 0时适用。

在没有看到SHOW CREATE TABLESELECT的情况下,很难猜测还有哪些其他优化可能有用。我想到的是:从该列开始的复合索引 starting

很难判断将两个表拆分是否有帮助。有时您需要UNION一起回来吗?如果拆分清理代码,那就好。请注意,在一个表或另一个表中,其他一些列可能会消失。

分区很少有帮助。