我想索引一个二进制列。它可以是1(对于300万行),也可以是0(对于100行)。 使用mysql的explain似乎完全忽略了我创建的索引,即使我使用 USE INDEX 在我的询问中。 难道就不能像这样索引一列吗?这是否意味着任何依赖于它的查询都将需要一个完整的表扫描? 我可以看到一种解决方案是将数据拆分为两个表,这在某种程度上是基于业务需求的。 还有其他选择吗? 谢谢!
当值为1(公共值)时,忽略索引并简单地扫描表,抛出几个不适用的行是非常困难的。 当值为0(非常罕见的值)时,将使用索引,并且非常有效。然而,这可能只适用于当你明确地说 WHERE col = 0 . 没有看到 SHOW CREATE TABLE 以及 SELECT ,很难猜测还有哪些优化可能有用。我想到的一个问题是:从该列开始的综合索引。 也很难判断分成两张table是否有帮助。你有时需要吗 UNION 他们又在一起了?如果拆分能清除代码,那就好了。请注意,其他一些列可能会在一个表或另一个表中消失。 分区很少有帮助。
1条答案
按热度按时间fiei3ece1#
当值为1(公共值)时,忽略索引并简单地扫描表,抛出几个不适用的行是非常困难的。
当值为0(非常罕见的值)时,将使用索引,并且非常有效。然而,这可能只适用于当你明确地说
WHERE col = 0
.没有看到
SHOW CREATE TABLE
以及SELECT
,很难猜测还有哪些优化可能有用。我想到的一个问题是:从该列开始的综合索引。也很难判断分成两张table是否有帮助。你有时需要吗
UNION
他们又在一起了?如果拆分能清除代码,那就好了。请注意,其他一些列可能会在一个表或另一个表中消失。分区很少有帮助。