MySQL 查询 WHERE 是条件多一点查询快还是少一点查询快?

MySQL 查询 WHERE 是条件多一点查询快还是少一点查询快

t_table 表有多个字段 type, name...

typetinyint 类型,namevarchar 类型

SELECT * FROM t_table WHERE type = 0 AND name = 'aaa' LIMIT 1
SELECT * FROM t_table WHERE name = 'aaa' LIMIT 1

这两个条语句哪个会更快

阅读 1k
4 个回答

一般来说type有索引那就第一条快,type没索引就第二条快,这里假设name字段没有索引,如果有也是同理。
对于第一条语句:
因为有索引的话先根据索引缩小范围再扫描这些记录里两个字段是否符合条件,
没有索引就只能全表一条记录一条记录扫描看两个字段是否符合条件
假设重复值比较多的话索引效果比较差,可能也走全表扫描就比第二条慢了
第二条语句就是全表扫描name字段是否符合条件

拙见:没有索引,这两条语句在快慢上没啥区别,区别只在于是否满足逻辑要求

如果type=0的记录在表中占比较大,且'aaa'是一个相对常见的名字(即name='aaa'的记录数量较多),那么第一个查询(同时包含type和name条件)可能更快,因为它首先通过type=0过滤掉大量无关记录,减少了后续对name字段的检查次数。
相反,如果type=0的记录占比较小,或者'aaa'是一个非常罕见的名字(即name='aaa'的记录数量极少),那么第二个查询(仅检查name)可能更快,因为检查一个字段的成本通常小于检查两个字段。

新手上路,请多包涵

先说结论:从理论上讲第二条比第一条快。

原因是不走索引的情况下mysql存储引擎层会遍历所有行返回给上层server层,server层再根据过滤条件过滤出符合条件的行,直到筛选出{limit}条符合条件的行才停止。那么这就意味着条件越严苛,扫描的行就越多,自然执行就越慢。

但是根据表数据的不同,可能执行时间没有区别。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题