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% ,但是就是扫描了全表

posted @ 2024-06-25 14:43  vx_guanchaoguo0  阅读(1)  评论(0编辑  收藏  举报