Mysql - 对大部分为空值的列进行索引

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

我有一个非常大的表,其中有一列大部分为空值。 我经常使用

x_column is not null
条件查询此表。

我想知道应该如何对其建立索引以及提高性能的最佳方法是什么,因为我在几个地方读到

is not null
甚至不使用索引。那么我可以在这里使用索引做什么呢?

例如,参见

thisthis,但还有更多。我不想添加另一个字段(计算字段)来解决它。还有另一种也许更新的方法吗?

(我使用的是innoDB)

mysql indexing null
1个回答
0
投票
我在几个不为空的地方读到甚至没有使用索引。

这不准确。

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
    
© www.soinside.com 2019 - 2024. All rights reserved.