Mysql 查询一个有趣现象导致索引失效
摘自极客时间45讲
我专门查了chatGPT
推论
- 似乎很有道理 既然字段长10 ,那么mysql 服务层是知道的,因此会自动截断做对比?
- 但是实际上对于这种server 不会对业务做过多的干预~ 还是真的扫码了全秒全部符合结果数据
- 因为普通索引的策略: 找到第一个后,继续找(唯一索引就不找了),直到全部都遍历完
- 这就是会导致索引失效根本原因
验证推论
-- 创建表
CREATE TABLE table_a (
id INT(11) NOT NULL,
b VARCHAR(10) DEFAULT NULL,
PRIMARY KEY (id),
KEY b (b)
) ENGINE=InnoDB;
-- 插入数据
INSERT INTO table_a (id, b) VALUES
(1, '1234567890'),
(2, '1234567890'),
(3, '1234567890');
-- 分析SQL
EXPLAIN SELECT * FROM table_a WHERE b = '1234567890abcd';
其实更进一步 如果是char 呢
- 长度固定 不够也会填充
- 其实也是一样 ,也走了索引,利用率是100% ,但是就是扫描了全表
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/18266986