一、MySQL 索引最左前缀原则
有一个复合索引:
INDEX(a, b, c)
哪些组合会用上索引?
答案:
查询方式 能否用上索引
---------------------------------------------------+----------------------------
select * from users where a=1 and b=2 能用上a、b
select * from users where b=2 and a=1 能用上a、b(有MySQL查询优化器)
select * from users where a=2 and c=1 能用上 a
select * from users where b=2 and c=1 不能
二、MySQL INT和CHAR隐式类型转换需要注意什么?
答案:
主要需要记住下面两点:
1.当查询字段是INT类型,如果查询条件为CHAR,将查询条件转换为INT,如果是字符串前导都是数字,将截取前导数字用来比较,如果没有前导数字,则转换为0。
2.当查询字段是CHAR/VARCHAR类型,如果查询条件为INT,将查询字段为换为INT再进行比较,可能会造成全表扫描。
答案解析:
有如下一张测试表product,id为int类型,name为varchar类型。
+----+----------+
| id | name |
+---