我正在尝试为二进制列建立索引。它可以是1(代表300万行),也可以是0(通常代表100行)。
使用MySQL的解释,即使我在查询中使用USE INDEX
,它似乎也完全忽略了我创建的索引。
难道根本不可能像这样索引一列?这是否意味着任何依赖于它的查询都需要全表扫描?
我可以看到一种解决方案是将数据分为两个表,这将基于业务需求是合理的。
还有其他选择吗?
谢谢!
答案 0 :(得分:0)
当该值为1(公共值)时,很多时候会忽略索引,而只是扫描表,扔掉一些不适用的行。
当该值为0(非常罕见的值)时,将使用索引,并且该索引非常有效。但是,此可能仅在您明确地说出WHERE col = 0
时适用。
在没有看到SHOW CREATE TABLE
和SELECT
的情况下,很难猜测还有哪些其他优化可能有用。我想到的是:从该列开始的复合索引 starting 。
很难判断将两个表拆分是否有帮助。有时您需要UNION
一起回来吗?如果拆分清理代码,那就好。请注意,在一个表或另一个表中,其他一些列可能会消失。
分区很少有帮助。