今天在公园里看到一个小男孩在教他的小狗做握手,小男孩重复了好几次,小狗终于学会了。
这个场景让我想起,有时候耐心和重复真的很重要。
就像我以前学骑自行车,摔了无数次,最后才勉强学会。
这个男孩大概5 岁,公园里的其他人都看着他笑。
等等,还有个事,我昨天看到一只猫在追自己的尾巴,转了半天没追到,最后自己停下来了。
突然想到,动物的世界有时候也挺有趣的。

MySQL高级:explain分析SQL,索引失效&常见优化场景

结论:Explain分析SQL,看id、type、key、rows等。

1 . id:查询序列号,PRIMARY最内层,SUBQUERY次之,DERIVED最慢。
2 . type:从好到坏:const, eq_ref, ref, range, index, ALL。
3 . key:实际使用索引,key_len越短越好。
4 . rows:扫描行数,越少越好。
5 . filtered:过滤比例,越高越可能优化。
6 . extra:额外信息,如using index。

索引失效: 1 . 不满足最左前缀。
2 . 范围查询后。
3 . 索引字段运算。
4 . 字符串未加引号。
5 . 避免select。
6 . OR分割条件。
7 . Like模糊查询。
8 . MySQL全表扫描更快。
9 . !=或。

优化: 1 . 大批量插入:load命令优化。
2 . ORDER BY:using index或using filesort。
3 . GROUP BY:使用索引或禁止排序。
4 . OR条件:每个条件列用索引。
5 . SQL提示:useindex, ignoreindex, forceindex。
6 . LIMIT分页:使用索引排序分页。

你自己掂量。

Mysql模糊查询LIKE语句结合CONCAT函数导致索引失效问题

答案:用LIKE和CONCAT做模糊查,MySQL索引多半要废。

解析: 1 . 索引失效,因为LIKE和CONCAT搞出新字符串,MySQL没法用原索引快查。
2 . 可能全表扫,效率低,性能差。
3 . 比如你表里category_code有索引,但JOIN时用LIKE CONCAT(' ', bci.category_code, '%'),索引就废了。
4 . 索引选性高也不行,因为LIKE和CONCAT搞破坏。
5 . 优化器可能觉得全表扫更高效,所以不选索引。

解决: 1 . 别用LIKE和CONCAT组合,找其他方法。
2 . 拆分查询,后端处理结果。
3 . 用全文索引,效率高。

总结:用LIKE和CONCAT做模糊查,MySQL索引要废,要么换方法,要么优化。