我有这样的查询:
select count(*) from people where text_field is not null;
这很慢。在中间文本字段上放置索引是犹太的吗?这是最好的做法是什么?
这个is not null
查询谓词因无法索引而臭名昭着。这是因为SQL中的空值比较非直观地工作。
你最好的办法是找出一些其他的方法来找到这些非空的text_field值。如果此查询需要经常运行,则需要存储某种标志值。
例如,添加一个名为text_field_length的INT列,并使用text_field的长度填充它,然后选择text_field_length> 0的位置
高价数据库(Oracle)有功能索引,可以让你索引这些东西。但令人遗憾的是,不是MySQL。
由于Mysql是一个“老锡罐”,我们不得不添加一个BOOLEAN类型的辅助字段,带有索引和触发器:
IF NEW.text_field='' THEN
SET NEW.boolean_field = 1;
ELSE
SET NEW.boolean_field = 0;
END IF
我希望你使用这种类型的查询
从text_field IS NOT NULL的人中选择count(*);
请添加filter子句以获得更好的性能
您将使用此查询
select count(*) from people where text_field not like "";
祝好运!