加快对mysql数据库中文本字段的NOT NULL查询

问题描述 投票:1回答:4

我有这样的查询:

select count(*) from people where text_field is not null;

这很慢。在中间文本字段上放置索引是犹太的吗?这是最好的做法是什么?

mysql
4个回答
4
投票

这个is not null查询谓词因无法索引而臭名昭着。这是因为SQL中的空值比较非直观地工作。

你最好的办法是找出一些其他的方法来找到这些非空的text_field值。如果此查询需要经常运行,则需要存储某种标志值。

例如,添加一个名为text_field_length的INT列,并使用text_field的长度填充它,然后选择text_field_length> 0的位置

高价数据库(Oracle)有功能索引,可以让你索引这些东西。但令人遗憾的是,不是MySQL。


0
投票

由于Mysql是一个“老锡罐”,我们不得不添加一个BOOLEAN类型的辅助字段,带有索引和触发器:

IF NEW.text_field='' THEN 
SET NEW.boolean_field = 1;
ELSE
SET NEW.boolean_field = 0;
END IF

-2
投票

我希望你使用这种类型的查询

从text_field IS NOT NULL的人中选择count(*);

请添加filter子句以获得更好的性能


-3
投票

您将使用此查询

   select count(*) from people where text_field not like "";

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.