zoukankan      html  css  js  c++  java
  • mysql 索引的原理

    1、考虑下面的情况,
    mysql> desc student;
    +----------+-------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | SCHOOL | varchar(64) | YES | | NULL | |
    | NAME | varchar(64) | YES | | NULL | |
    | birthday | date | YES | | NULL | |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set

    mysql> select * from student;
    +--------+----------+------------+
    | SCHOOL | NAME | birthday |
    +--------+----------+------------+
    | NUM_1 | Andy | 1985-08-20 |
    | NUM_1 | Andy | 1989-08-20 |
    | NUM_2 | Bill | 1983-08-20 |
    | NUM_2 | Caroline | 1984-06-20 |
    | NUM_3 | Bill | 1982-08-10 |
    +--------+----------+------------+
    5 rows in set

    2、我要select * from student where school='NUM_2'; 这个查询必须要全表扫描(也就是遍历所有的记录),效率会很差。
    3、对字段school建立索引,也就是把每条记录school字段的值取出来,进行排序,也就是索引。
    4、索引的结构是B+Tree,是一种优化的二叉搜索树。节点包含多个元素值,每个元素值前后各有指针指向子节点,相邻两个元素值定义了子节点的上限和下限,叶子节点的指针指向数据库的记录,为了避免在树节点上下往返,会把枝节点的值拉到叶子节点,并且前一个叶子节点指向下一个叶子节点。
    5、索引为什么可以提高访问效率?
    存储引擎不需要遍历所有记录(全表扫描)来获取需要的记录,而是从索引的根节点出发,与元素值比较,找到合适的指针进入下层节点,两个元素值定义了下层节点的上限和下限,这样很快进入到叶子节点,最后定位到数据库中的记录。因为,索引结构是有序的,查找范围数据的效率也很高。

  • 相关阅读:
    forin语句和document.write换行
    输入日期计算出当天是星期几
    输入半径求圆的面积和简单的ASCII码转化
    一段简单的代码用来在网页上测试javascript程序
    如何在ubuntu下修改hosts?
    如何在终端上打出货币符号和算式
    C#文件监控
    JavaScript类的写法 ( 仿jQuery )
    JavaScript类创建的几种方式
    (转)程序员的十层楼:大家都来测测你的技术层级
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4604648.html
Copyright © 2011-2022 走看看