关于MySQL select * from 【表名】where 【字段】= ? limit 1执行效率问题解释
关于select * from 【表名】where 【字段】= ? limit 1执行效率问题
首先可以用explain解析一条sql语句,重点关注访问方式又称访问类型【type】和执行查询行数【rows】
type有一下类型:
- all:mysql将遍历全表找到匹配行
- index:按索引顺序进行全表匹配
- range:有范围的索引烧苗
- ref:表示连接匹配条件,既哪些列或常量被用于查找索引列上的值
- eq_ref:类似ref,区别在于使用的是唯一索引,对于每个索引键值表中只有一条记录匹配,就是多表连接中使用primary key 或者 unique key作为关联条件
- const、system:如果将主键置于where列表中,mysql就能将查询转换为一个常量。system是const类型的特例,当查询的表中只有一行的情况,使用system
- NULL:执行时甚至不用访问表或索引,列入从一个索引列里选取最小值可以通过单独索引查找完成。
从上到下性能由差变好
EXPLAIN SELECT * FROM supplier WHERE id = 1 LIMIT 1;
EXPLAIN SELECT * FROM supplier WHERE id = 50;
EXPLAIN SELECT * FROM supplier WHERE name = "Vitae ABCD" LIMIT 1;
EXPLAIN SELECT * FROM supplier WHERE name = "Vitae ABCD";
所以,我认为当只查询一条语句的时候,不管有没有limit 1 效率都不会提高,而在于where后面字段是否为主键,如果为主键,才会提高,不为主键就不会提高。