V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
moxiaowei
V2EX  ›  MySQL

mysql or 关键字的执行问题

  •  
  •   moxiaowei · 2023-01-05 10:40:20 +08:00 · 1418 次点击
    这是一个创建于 699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 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 拆分开执行的?有没有大佬跟我讲解下。谢谢

    4 条回复    2023-01-05 18:51:17 +08:00
    shanghai1943
        1
    shanghai1943  
       2023-01-05 11:11:22 +08:00
    mysql 啥版本的。可以 explain 看看查询计划的结果。实在不放心的话,就把 or 语句拆成 union 的写法。但不管怎样,执行 SQL 前养成先 explain 一下的习惯总归是不错的。
    GuardX
        2
    GuardX  
       2023-01-05 11:36:28 +08:00
    explain 看下走的哪个索引
    8355
        3
    8355  
       2023-01-05 12:04:04 +08:00
    肯定是拆分执行更好
    但如果需要排序等等其他操作你的程序整体实行速度可能并不一定比 or 要好 看整体性能不要只看 sql
    leopod1995
        4
    leopod1995  
       2023-01-05 18:51:17 +08:00
    没有索引的话 是全表扫。 可以理解为 fetch 一条数据进行匹配,or 在这种情况下是同时匹配条件的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5876 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:47 · PVG 09:47 · LAX 17:47 · JFK 20:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.