mysql - 仅用于 IS NULL 和 IS NOT NULL 的列上的索引

标签 mysql null indexing

我的表中有一列已删除。在每个 sql 语句中,我检查此 flag 是否为 NULL。是否有人要删除条目,标志设置为当前时间戳。

在恢复条目的情况下,此时间戳用于恢复它们。这是将使用此列的值的唯一用例。

在所有其他情况下,重要的只是知道它是 NULL 还是 IS NOT NULL。

在未来,该表可以并且将会包含数百万行。

在这个列上创建索引有用吗?因为 99% 的语句和用例都不关心值。 MySQL 是否优化了 IS NULL 条件,因此不需要索引?

最佳答案

'deleted' 上的索引也将索引 null 值,从而允许更快地查找非 null/null

我认为这在这种情况下就足够了,不会造成太多开销,因为时间戳是在删除时设置的,因此不会改变太多。 (相反:使用一直更改且仅有时设置为空的编辑时间戳会导致每次更改记录时都调整索引。这可能不是最佳选择。这里不是这种情况。)

(此外,但我不知道索引器是否足够聪明以利用这一点,预期的更改总是转到索引的末尾,无论是在空端还是在“最新”端.)

当然,配置文件(查询执行时间和存储空间,如果重要的话)以找出是否存在由此产生的实际问题。

关于mysql - 仅用于 IS NULL 和 IS NOT NULL 的列上的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025814/

相关文章:

php - MySQL 将值从一个大表复制到另一个大表(数百万行)

mysql - 比较并连接多个表,但仅显示是否存在关系

c - 如何在C程序中将数组中的元素设置为空

sql - MySQL IS NOT NULL 和 != '' 之间的区别

Objective-C:你能测试静态类类型的未初始化指针吗?

mysql - 在 MySQL 中删除表是否也会删除索引?

javascript - 从数组索引中的数组中选择数据

php - 如何在 PHP 中为取决于用户输入的长查询显示 MySQL 错误?

elasticsearch - 如何计算Elasticsearch字段大小

mysql - Workbench 模型同步/Forward Engineer 可能存在错误?