在校招和初级岗位的面试中使用该案例会很有效果,但是整体来说它是一个简单的案例,所以面一些比较高端的岗位的时候,它并不能为你赢得竞争优势。
这个案例可以作为你排查数据库性能问题的案例,也可以作为性能优化的案例。
索引失效有很多种可能,你可以从这个问题里面为什么定义了索引,但是最终数据库却没有用上?找到详细的描述,这个案例描述的是在一些特定的场景下,MySQL 会放弃使用索引,选择使用全表扫描。
在这个案例里面我们通过构造 WHERE 查询,导致被查询条件发生隐式类型转换,从而导致索引失效,转而使用全表扫描。对应的代码在 interview-cases/case1_10/case3_test.go at main · meoying/interview-cases (github.com)。
其实整个案例非常简单。就是根据payment_id查找对应的payment_log记录,执行下面的EXPLAIN命令,你会发现它会使用索引: