我有一个非常大的表,其中有一列大部分为空值。 我经常使用
x_column is not null
条件查询此表。
我想知道应该如何对其建立索引以及提高性能的最佳方法是什么,因为我在几个地方读到
is not null
甚至不使用索引。那么我可以在这里使用索引做什么呢?
例如,参见 this 或 this,但还有更多。我不想添加另一个字段(计算字段)来解决它。还有另一种也许更新的方法吗?
(我使用的是innoDB)
我在几个不为空的地方读到甚至没有使用索引。
这不准确。
https://dev.mysql.com/doc/refman/8.4/en/is-null-optimization.html 说:
MySQL 可以对同样,
col_name IS NULL
执行与用于col_name = constant_value
相同的优化。
IS NOT NULL
也像
col_name <> constant_value
一样进行优化。 IE。这是一个范围访问。 演示:
使用 MySQL 8.4.2,但这也适用于 MySQL 8.0 和 5.x。
mysql> create table mytable (id serial primary key, v varchar(10), x int, key(v));
mysql> explain select * from mytable where v is not null\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: mytable
partitions: NULL
type: range
possible_keys: v
key: v
key_len: 43
ref: NULL
rows: 1
filtered: 100.00
Extra: Using index condition