› 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
K1W1
V2EX  ›  MySQL

请问 Mysql 在查询不等于的操作时如何走索引

  •  
  •   K1W1 · Jan 23, 2018 · 17301 views
    This topic created in 3192 days ago, the information mentioned may be changed or developed.
    单表查询,尝试使用 a != xx 或者 a not in (xx) 或者 a <> xx 或者 a > xx or a < xx,看执行计划都不走索引。请问各位大牛 mysql 有没有比较好的执行不等于的操作的方法
    7 replies  •  2018-01-23 14:37:22 +08:00
    realpg
        1
    realpg  
       Jan 23, 2018
    数字的话,用< union >
    realpg
        2
    realpg  
       Jan 23, 2018   ❤️ 1
    感觉好像歧义了,不是什么特殊括号,是用小于 union 大于
    purejs
        3
    purejs  
       Jan 23, 2018   ❤️ 1
    一般是建立 联合索引比如 index(a, b) 然后查询的时候 where a = key1 and b > ... 。这个时候 b 的不等于操作是基于 a 字段索引下的扫描。B+树的构造决定了索引怎么走。另外,现在只需要写 SQL 就可以直出 web 了:enhancer.io
    K1W1
        4
    K1W1  
    OP
       Jan 23, 2018
    @realpg #2 谢谢回复,我试了,但是遇到一个奇怪的问题,> 走了索引 ,< 没有走索引
    K1W1
        5
    K1W1  
    OP
       Jan 23, 2018
    @purejs #3 可以如果我只需要这一个条件呢?不太明白 a 字段的作用
    purejs
        6
    purejs  
       Jan 23, 2018   ❤️ 1
    @K1W1 只有一个字段的话,数据库优化器会判断候选结果集是否超出了全部结果的 5%(估计),如果超过,那么就全表扫描。所以像> < in 这种操作,走不走索引要看本身可能的结果数量。
    K1W1
        7
    K1W1  
    OP
       Jan 23, 2018
    @purejs #6 谢谢,涨知识了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3453 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:02 · PVG 19:02 · LAX 04:02 · JFK 07:02
    ♥ Do have faith in what you're doing.