本人最近在研究 mysql索引相关的东西,有个问题,麻烦大牛们帮我看下,谢谢!
假设有如下一个表:
CREATE TABLE People (
   last_name varchar(50)    not null,
   first_name varchar(50)    not null,
   dob        date           not null,
   gender     enum('m', 'f') not null,
   key(last_name, first_name, dob)
);
其中通过组合索引(last_name,first_name,dob)构成的B-TREE索引如下图所示: 假如我要根据索引查找last_name为Barrymore,first_name为Julia,dob为2000-05-16,那么mysql是怎么查找的呢?我想到的有如下两种方式:
方式一:先将last_name为Barrymore的叶子节点全部查找出来,然后将这些查找出来的节点根据first_name为Julia的查找出来,最后再通过dob得到满足条件的数据;
方式二:先查找根节点,依次遍历,只到找到满足条件last_name为Barrymore的节点,然后马上比较first_name是不是Julia,再比较dob是不是2000-05-16,如果满足这些条件,则认为这个节点数据是满足条件的,然后再去查找下个节点。

解决方案 »

  1.   

    这个不用分析。 你可以直接在MYSQL中用
    explain select ....
    语句直接得到MYSQL的执行计划,可以一目了然的看到MYSQL是如何处理的。
      

  2.   

    explain一下mysql的执行计划就知道了
      

  3.   

    1、看MYSQL源码;
    2、用EXPLAIN 看SQL执行情况;
    3、高性能MYSQL中有1章讲了一下MYSQL的索引。
      

  4.   

    explain select语句的执行计划就可以了。