关于 mysql 的 or 查询,比如 select...from...where name=xxx or age =xxx 。这一条 sql 语句,在 mysql 执行的时候,是把 sql 拆分为 select...from...where name=xxx 拿到结果临时存起来再执行 select...from...where age =xxx 再跟前面的结果进行合并呢,还是 就当做一条语句执行?因为,在看关于 or 的索引失效的问题,解决方案是 or 前后的字段都需要加索引,我感觉是把 select...from...where name=xxx or age =xxx 拆分开执行的?有没有大佬跟我讲解下。谢谢
1
shanghai1943 2023-01-05 11:11:22 +08:00
mysql 啥版本的。可以 explain 看看查询计划的结果。实在不放心的话,就把 or 语句拆成 union 的写法。但不管怎样,执行 SQL 前养成先 explain 一下的习惯总归是不错的。
|
2
GuardX 2023-01-05 11:36:28 +08:00
explain 看下走的哪个索引
|
3
8355 2023-01-05 12:04:04 +08:00
肯定是拆分执行更好
但如果需要排序等等其他操作你的程序整体实行速度可能并不一定比 or 要好 看整体性能不要只看 sql |
4
leopod1995 2023-01-05 18:51:17 +08:00
没有索引的话 是全表扫。 可以理解为 fetch 一条数据进行匹配,or 在这种情况下是同时匹配条件的
|