gpt4 book ai didi

mysql - 你能创建一个索引来确定mysql中的文本列是否为空吗?

转载 作者:行者123 更新时间:2023-11-29 16:05:14 25 4
gpt4 key购买 nike

我有一个非常大(> 1 亿行)的表,我需要编写的查询需要检查 TEXT 类型的列是否为空。我不关心实际文本,只关心列值是否为空。

我正在尝试编写一个索引来提高查询效率,并且我希望仅通过查看索引来满足查询,例如这样explain output该查询显示使用索引而不是使用索引条件

具体来说,我正在处理的表具有如下结构:

CREATE TABLE foo (
id INT NOT NULL AUTO_INCREMENT,
overridden TEXT,
rowState VARCHAR(32) NOT NULL,
active TINYINT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
) ENGINE=InnoDB

我想要的查询是这样的:

SELECT 
IF(overridden IS NULL, "overridden", rowState) AS state,
COUNT(*)
FROM foo
WHERE active=1
GROUP BY state

overridden 列描述了为什么该列被覆盖,但是,正如我上面提到的,我不关心它的内容,我只想将它用作 bool 标志。

我尝试在(active, rowState, overridden(1))上创建索引,但解释输出仍然显示使用索引条件

还有什么我可以做的更好的事情吗?

最佳答案

我怀疑这对于“前缀”索引来说是一个很好的应用。 (大多数使用此类的尝试都以失败告终。)

我认为最佳顺序是:

INDEX(active,         -- handle the entire WHERE first
overridden(1), -- IS NULL possibly works well
rowState) -- to make index "covering"

使用索引条件意味着行的选择是在引擎中处理的,而不是“处理程序”中。

EXPLAIN FORMAT=JSON SELECT ... 可以更深入地了解正在发生的情况。 “优化器跟踪”也可能如此。

或者...

如果 MySQL 版本足够新,请创建一个“生成列”,该列将保留计算值overridden IS NULL

关于mysql - 你能创建一个索引来确定mysql中的文本列是否为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com