mysql索引自编

  1. 有a ,b ,c 建立复合索引,select * from table where a = 1 and c = 2 会用到索引么?

      1. 最左前缀原则:MySQL 的复合索引遵循最左匹配特性,即只有从索引最左侧字段开始的连续字段组合才能有效利用索引。在这个复合索引中,有效前缀包括 (a)(a, b) 和 (a, b, c)
      2. 查询中的索引匹配:
        • 查询条件中的 a = 1 能利用索引的第一个字段 a
        • 由于 b 字段未出现在查询条件中,索引的连续性被中断,导致 c = 2 无法继续使用该索引。
      3. 实际索引使用情况:
        • 索引的前导部分 a 会被使用,用于快速定位满足 a = 1 的记录。
        • 索引的剩余部分 b 和 c 无法被利用,因此 c = 2 的过滤需要在 a = 1 的结果集上进行二次筛选。
      4. 执行计划分析:
        • 若满足 a = 1 的记录较少,MySQL 可能选择使用索引扫描,先通过索引定位 a = 1 的记录,再过滤 c = 2 的记录。
        • 若满足 a = 1 的记录较多,全表扫描可能比索引扫描更高效,此时索引可能被完全忽略。
      总结:该查询会部分使用复合索引 (a, b, c),但仅限于 a 字段,无法利用 c 字段。若需优化该查询,建议创建专门的复合索引 (a, c) 或单独的索引 (a) 和 (c)
       
  2. 有a ,b ,c 建立复合索引,select * from table where a = 1 and b > 2 and c = 2 会用到索引么?

    1. a,b索引会用到,c失效,如下图

       

    2.  

  3. mysql索引叶子节点是磁盘是顺序存储么

  4. Myisam的数据和索引文件是分开的是非聚簇索引,innodb是在一起的聚簇索引

    1.  

  5. innodb的索引结构,主键索引和普通索引区别

    1.  

posted @ 2025-07-02 21:59  飘来荡去evo  阅读(5)  评论(0)    收藏  举报