zoukankan      html  css  js  c++  java
  • mysql组合索引之最左原则

     为什么在单列索引的基础上还需要组合索引?  

      select product_id from orders where order_id in (123, 312, 223, 132, 224);

        我们当然每个字段都可以创建索引 在不建立组合索引的前提下 mysql只会用到其中一个最有效率的索引 ,效率平庸

        但当我们建了组合索引后 (Btree索引结构下)当我们建立了组合索引prodect_id,order_id后像上面的语句  我们可以直接根据order_id查找到
    product_id,不用再取文件中取product_id

    组合索引的最左原则是什么?

          组合索引,其实是相当于分别建立了下面三组组合索引:
    1. usernname,city,age  
    2.  
    3. usernname,city  
    4.  
    5. usernname  
    为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
    1. SELECT * FROM mytable WHREE username="admin" AND city="郑州" 
    2.  
    3. SELECT * FROM mytable WHREE username="admin" 
    而下面几个则不会用到:
    1. SELECT * FROM mytable WHREE age=20 AND city="郑州" 
    2.  
    3. SELECT * FROM mytable WHREE city="郑州" 

  • 相关阅读:
    定义和使用EL函数
    在Java Web程序中使用Hibernate
    JDBC在Java Web中的应用——分页查询
    JDBC调用存储过程
    使用navicat工具创建MySQL存储过程
    JDBC操作数据库的批处理
    JDBC操作数据库
    Servlet监听器统计在线人数
    Servlet字符编码过滤器
    Servlet过滤器创建与配置
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/10809081.html
Copyright © 2011-2022 走看看