diff --git a/2014/12/24/MFC 模态对话框/index.html b/2014/12/24/MFC 模态对话框/index.html index e5c1eee9bd..4ebaaef1f8 100644 --- a/2014/12/24/MFC 模态对话框/index.html +++ b/2014/12/24/MFC 模态对话框/index.html @@ -301,7 +301,7 @@

再来看看另一个
1 | EXPLAIN select * from null_index_t WHERE null_key is not null; |

从这里能看出来啥呢,可以思考下
从上面可以发现,is null应该是用上了索引了,所以至少不是一刀切不能用,但是看着is not null好像不太行额
我们在做一点小改动,把这个表里的数据改成 9100 条是 null,剩下 900 条是有值的,然后再执行下
然后再来看看执行结果
1 | EXPLAIN select * from null_index_t WHERE null_key is null; |

1 | EXPLAIN select * from null_index_t WHERE null_key is not null; |

是不是不一样了,这里再补充下我试验使用的 mysql 是 5.7 的,不保证在其他版本的一致性,
其实可以看出随着数据量的变化,mysql 会不会使用索引是会变化的,不是说 is not null 一定会使用,也不是一定不会使用,而是优化器会根据查询成本做个预判,这个预判尽可能会减小查询成本,主要包括回表啥的,但是也不一定完全准确。

再来看看另一个
1 | EXPLAIN select * from null_index_t WHERE null_key is not null; |

从这里能看出来啥呢,可以思考下
从上面可以发现,is null应该是用上了索引了,所以至少不是一刀切不能用,但是看着is not null好像不太行额
我们在做一点小改动,把这个表里的数据改成 9100 条是 null,剩下 900 条是有值的,然后再执行下
然后再来看看执行结果
1 | EXPLAIN select * from null_index_t WHERE null_key is null; |

1 | EXPLAIN select * from null_index_t WHERE null_key is not null; |

是不是不一样了,这里再补充下我试验使用的 mysql 是 5.7 的,不保证在其他版本的一致性,
其实可以看出随着数据量的变化,mysql 会不会使用索引是会变化的,不是说 is not null 一定会使用,也不是一定不会使用,而是优化器会根据查询成本做个预判,这个预判尽可能会减小查询成本,主要包括回表啥的,但是也不一定完全准确。