達成するためのインデックスデータベースのストレージエンジン

データを格納するための一つの、2つの一般的なストレージエンジン:

InnoDBは、これら2つのエンジンの実装原理を理解するためのMyISAMインデックスは、我々は、データストレージのための2つのエンジンの違いを知っている必要があります。データベースエンジンは、テーブルに記述の一種であり、同じデータベース・テーブルの下に異なるエンジンの様々なあってもよいです。比較の下だから私は2つのテーブルを構築しました。製品のテーブルとユーザーテーブルは、彼らがInnoDBテーブルとテーブルのMyISAMのエンジンです。図:

 

実際には、データはディスク・ファイルをデータベースに格納されています。データの下にこのenginetest対応するデータベースは、新しいテストライブラリであります

 

その後、下にディレクトリを開くライブラリは、データテーブルに格納されていることがわかります。ここでは2つのエンジンの違いは明白です、

 

 明らかに、MyISAMのエンジンは3つの文書、すなわち.FRM(データ構造).MYD(データ).MYI(インデックス)を持っている、あなたは出て見に名前を見ることができます。特定のファイルの内部で何DATA、INDEX ...

    InnoDBエンジンのみ2つのファイル1は、.FRM(データ構造)であるの.ibd(インデックス+データ)であります

どのような次の私たちが最後に文書を見て、それは、MyISAMのエンジンであり、

 

 私は、mysqlは簡単な裸でデータファイルの存在を入れていないだろうと思いますが、あなたは、どのような終わりであるそれらの文書を知ることになるでしょう。それでも、まあちぇ見えた、ちぇを開くことが好奇心ではない具体的な内容が、MYD文書は明確に、ジョー・スミスとジョン・ドウの同級生の同級生で、ユーザーの一部を露出させ、emmm ... MYIファイルは確かにありますインデックスが、私の肉眼を許しては、読むことができない偉大な神が説明することができます理解することができます...しかし、以下のようにそれを見非常に単純なインデックスは、データのMyISAMストレージの分析後に達成しました:

第二に、達成するためのインデックスMyISAMストレージエンジン

 

 在上一篇博客中有提到mysql索引的底层是B+树,叶子节点存储的就是索引和对应的数据。每个节点都大于左侧,小于等于右侧。MyISAM存储引擎就具体在叶子节点存储的是记录所在行的磁盘文件地址,相当于一个指针。指向.MYD文件中的对应每一条记录。比如要搜索索引为49的记录select * from user_myisam where col1=49; 过程就是先在内存中的根节点中对比,发现15<49<=56找到第二层的15 20 49 发现 30<49<=49就找到叶子节点的49 50,最后发现=49找到0x90然后再.MYD中找到对应的记录49 22 Tom,然后就找到了Tom老师了,可以去找他剪个帅气的发型☺

三、InnoDB存储引擎的索引实现

 

 由上图,可以清楚的看出InnoDB存储引擎将数据库的索引和全量的表字段数据值都存放再叶子节点中。从磁盘中的文件一可以看出来,InnoDB只有一个数据结构文件和一个.ibd的文件,这个.ibd的文件就存储了索引元素和所有的数据。所以InnoDB存储引擎是一种聚合存储引擎。MyISAM是一种分离的存储引擎,需要先查询到叶子节点,再查询磁盘文件地址才能得到想要的数据。显然聚合存储引擎要比MyISAM这种分离的存储引擎快。

问题为什么要推荐主键整形自增:

Q:为什么InnoDB表必须要有主键,且最好是整形自增的

1.必须有主键。InnoDB存储引擎底层就是将主键索引和数据存储再叶子节点的,没有主键没法存数据了。如果你建表的时候没有添加主键的话,mysql会自动添加一列隐形列来维护主键索引的

2.主键整形。主键在做查询的时候势必需要在B+树上进行节点对比来搜索叶子节点,整形比较当然比字符串要快。而且因为叶子节点之间的指针也是从左到右增大的。如果查找col1>20的就很方便,定位到20后其他元素都可以用指针顺藤摸瓜的全部找到了。而B树是没有叶子节点的指针的。所以B+树才是Mysql数据库中最优秀的索引实现。选择自增的主键无疑可以提高查询的效率

3.主键自增。因为如果不是自增插入数据的,很可能插入的数据会破会之前已经建立好的b+树的结构,这些都是会消耗资源的,但是如果自增插入,永远都是在上图的....这个位置做插入,对b+树的结构不会有特别大的影响。

联合索引

 

 如上图,联合索引就是说多个字段同时作为索引,会按照索引顺序将多个字段一起放到索引元素中去,如果第一个字段就能比较出大小。按照第一个字段放,否则第二个一次推

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/liuyongbo/p/11976911.html