gpt4 book ai didi

mysql - 为什么 MySQL 多列索引会过载?

转载 作者:可可西里 更新时间:2023-11-01 08:55:52 27 4
gpt4 key购买 nike

考虑以下 MySQL 表:

CREATE TABLE `log`
(
`what` enum('add', 'edit', 'remove') CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
`with` int(10) unsigned NOT NULL,

KEY `with_what` (`with`,`what`)
) ENGINE=InnoDB;

INSERT INTO `log` (`what`, `with`) VALUES
('add', 1),
('edit', 1),
('add', 2),
('remove', 2);

据我了解,with_what 索引在其第一个 with 级别上必须有 2 个唯一条目,在 what 中必须有 3(编辑:4)个唯一条目> “子索引”。但是 MySQL 为每个级别报告 4 个唯一条目。换句话说,每个级别的唯一元素数始终等于 log 表中的行数。

编辑:“第二级”的唯一条目数等于记录总数是可以的,但顶级则不行。

EDIT2:注意到如果 with 列占用的位数发生变化,例如更改为 int(11) 并返回到 int(10),则基数开始按预期工作。甚至 EXPLAIN SELECT COUNT(DISTINCT 'with') FROM log 也会为 rows 显示足够的值。

这是错误、功能还是我的误解?

最佳答案

SHOW INDEXES 显示近似的统计数据。

这些统计信息会在对表执行查询时自动收集,此外,您可以通过发出 ANALYZE TABLE log 强制手动收集它们。

基数列中的值不准确,它可以在调用 ANALYZE 时发生变化,即使基础表未发生变化也是如此。

关于mysql - 为什么 MySQL 多列索引会过载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4529746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com