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

请教大家 如 select * from V2EX where a = 1 order by b desc limit 1 的 sql 如何建立索引?

  •  
  •   Nicolay · Aug 13, 2019 · 6392 views
    This topic created in 2600 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Aug 14, 2019
    试验得知:
    联合索引 b a 和 单独索引 b 有效,只扫描了一行就得到结果,
    但是 联合索引 a b 无效,可能是因为 我的 a 字段只有 两种值,
    12 replies  •  2019-08-26 15:54:37 +08:00
    cz5424
        1
    cz5424  
       Aug 13, 2019 via iPhone
    a,b 联合索引不行吗
    Raymon111111
        2
    Raymon111111  
       Aug 13, 2019
    不考虑其它查询和区分度的话

    建联合索引 a, b
    limuyan44
        3
    limuyan44  
       Aug 13, 2019
    连上你的 mysql,explain
    passerbytiny
        4
    passerbytiny  
       Aug 13, 2019
    不知道我理解的对不对,除了直接查索引的( select pk from table where pk > some 这种的),排序跟索引无关。
    reus
        5
    reus  
       Aug 13, 2019
    explain 一下
    建索引
    再 explain 看看有没有不一样
    就行了
    Oktfolio
        6
    Oktfolio  
       Aug 13, 2019
    联合索引 a, b
    Laz
        7
    Laz  
       Aug 13, 2019
    explain
    Zach369
        8
    Zach369  
       Aug 13, 2019
    如果只看这个 sql 语句,a,b 联合索引就可以了。 但是也要看实际情况。explain 看下。
    xaoduer
        9
    xaoduer  
       Aug 13, 2019
    a,b 联合索引的时候,先根据 a 索引查找出 a=1 的行,如果没有 desc,直接根据最左前缀从 b 索引取第一条即可。但如果是 desc,是不是意味着要对所有 a=1 的结果由正序变成逆序,刚好对应排序算法的最坏复杂度,看起来执行效率比单个 a 索引更差?
    ntdll
        10
    ntdll  
       Aug 13, 2019
    @xaoduer #8 应该不是结果由正序变逆序。自然结果下,并不一定是正序啊。所以也不能推导出,最坏的排序复杂度。

    从 SQL 语句看,a、b 字段加索引就可以了。
    Varchar
        11
    Varchar  
       Aug 13, 2019
    感觉 a、b 各自单独加索引或者联合索引区别不大 从扫描级别上看,应该都是 ref
    Aresxue
        12
    Aresxue  
       Aug 26, 2019
    猜一下,a 字段只有两种取值,所以扫描行数过多,导致 CBO 放弃走索引执行全表扫描(联合索引 a,b 同理,因为 mysql 索引是最左匹配原则,联合索引 a,b 你可以想象成在 B+树的分支中挑选出为 a 的子树,然后再在当前范围中找出为 b 的子树,但在熟筛选 a 的时候这个执行计划就被 CBO 放弃了)。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   955 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 18:53 · PVG 02:53 · LAX 11:53 · JFK 14:53
    ♥ Do have faith in what you're doing.