zoukankan      html  css  js  c++  java
  • Mysql 索引介绍

    --查看数据页默认大小,默认为16KB
    show global status like 'Innodb_page_size';

    一个数据页看做树结构中的一个节点,一个数据页默认大小为16KB,一个数据页把它拆分成多个小块,每一小块把它叫做元素(Element)。
    Element由索引值(Index)与数据(Data[address|record])组成。

    data可以是address(地址值)大概占6B(字节);也可以是record(一条记录),大一点算1KB,一般没有这么大。

    B-Tree数据特点

    • 节点中的每个元素都由元素element由索引值(index)跟记录(record)组成;
    • 每个节点元素之间是有序的;
    • 节点之间没有顺序关联

    B+Tree数据特点

    • 非叶子节点的元素element由索引值(index)跟下一个节点的地址值(address)组成;
    • 叶子节点的元素element由索引值(index)跟记录(record)组成;
    • 每个节点元素之间是有序的;
    • 叶子节点之间是顺序关联的(可以理解为指针),非叶子节点之间没有关联

    下面看看B+Tree下,一张表大概可以存放多少数据
    根节点大概可以存放多少索引?

    非叶子节点,一个元素占用空间大小:index(8B)+addrdss(6B) = element(14B)
    叶子节点,一个元素占用空间大小:index(8B) + record(1KB) ≈ 1024B

    根节点大致存放索引数:16 * 1024 / 14 = 1170个
    第二层子节点存放索引数:1170 * 1170 = 1,368,900个

    叶子节点存放数据:1170 * 1170 * (16 * 1024) / 1024 = 21,902,400。即是说这张表大概可以存放21,902,400数据。
    根据阿里使用经验来看mysql一张表的数据最好不要超过500W,超过500W可以分表、分库。

    mysql索引使用B+Tree的原因
    1、每个数据页存放的数据更多。
    2、在树深度相同情况下,可以存放更多的数据。
    3、在表存放数据相同情况下,B-Tree的深度更大,导致I/O次数更多,因此查询更慢。
    4、由于叶子节点之间有顺序关联关系,因此在进行范围查找时,可以减少查找次数。

    —转载请注明出处
  • 相关阅读:
    C#_获取汉字拼音
    C#中汉字轻松得到拼音全文类
    Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
    ASP.NET的用户控件
    js获取url参数值
    常用编程软件下载地址
    Asp.net 程序优化js,css合并与压缩
    做BS开发,你应该知道的一些东西
    c#.net常用函数和方法集
    C# Lambda Expressions 简介
  • 原文地址:https://www.cnblogs.com/landiss/p/14638157.html
Copyright © 2011-2022 走看看