mysql - 检查mysql是否有索引null

标签 mysql query-optimization

基于 this question我相信 mysql 确实索引空值。 我正在尝试优化一个 sql server,我想知道服务器是否有索引空值;有没有办法检查 NULL 值的索引?

最佳答案

无视,无视,无视!

对于 NULL,索引是 0 字节、1 字节、2 字节还是几个字节——这在总体方案中无关紧要。

BTree(您正在谈论的索引是 BTree)向下钻取的级别非常少(10 亿 行可能有 5 个级别)。即使索引中的每个“行”的大小都翻了一番,BTree 可能仍然只有 5 层深。 “5”是一次“点查询”的费用。这与条目中的绒毛无关。

手册页可能是 MyISAM 是唯一引擎时的遗留问题。 InnoDB 的出现不一定会更新像这样的详细信息,更不用说它的 4 个 ROW_FORMATs

也不要相信EXPLAIN。当它说 Key_len 时,它只提供条目大小的线索。

INT NOT NULL -- 4 -- meaning 4 bytes
INT     NULL -- 5 -- implying an extra byte for NULL
VARCHAR(10) CHARACTER SET utf8 -- 32 -- 2 for length (might be only 1) + 3*10

但是 varchars 不占用 32 个字节;它们的长度可变

关于mysql - 检查mysql是否有索引null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187658/

相关文章:

php - SQL JOIN 获取项目的名称和所有标签

PHP 插入在 MySQL 查询尝试中返回 Null

mysql - 在寻找饮料时找到最近的酒吧

mysql - 与 MyISAM 相比,innodb 的距离搜索非常慢

mysql - 计算每个用户登录之间的时间

复杂查询的 MySQL 查询优化

python - 返回我的错误是 `Access denied for user ' root' @'localhost'(使用密码 : YES )`. Even when I use ` mike`

mysql - 关于消息系统DB表结构的建议

php - 学说-SQLSTATE [42S22] : Column not found: 1054 Unknown column

query-optimization - 是否可以进行更快的过滤查询?