<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>索引 on Yeqown</title>
    <link>https://www.yeqown.xyz/tags/%E7%B4%A2%E5%BC%95/</link>
    <description>Recent content in 索引 on Yeqown</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Thu, 11 Jan 2018 19:08:44 +0000</lastBuildDate>
    <atom:link href="https://www.yeqown.xyz/tags/%E7%B4%A2%E5%BC%95/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>数据库索引基础</title>
      <link>https://www.yeqown.xyz/2018/01/11/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95%E5%9F%BA%E7%A1%80/</link>
      <pubDate>Thu, 11 Jan 2018 19:08:44 +0000</pubDate>
      <guid>https://www.yeqown.xyz/2018/01/11/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95%E5%9F%BA%E7%A1%80/</guid>
      <description>&lt;p&gt;数据库索引的简单介绍和使用注意事项&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h3 id=&#34;树&#34;&gt;树&lt;a class=&#34;anchor&#34; href=&#34;#%e6%a0%91&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;二叉树&#34;&gt;二叉树&lt;a class=&#34;anchor&#34; href=&#34;#%e4%ba%8c%e5%8f%89%e6%a0%91&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code&gt;性质1：在二叉树中第 i 层的结点数最多为2^(i-1)（i ≥ 1）&#xA;性质2：高度为k的二叉树其结点总数最多为2^k－1（ k ≥ 1）&#xA;性质3：对任意的非空二叉树 T ，如果叶结点的个数为 n0，而其度为 2 的结点数为 n2，则：n0 = n2 + 1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;二叉搜索树-bst&#34;&gt;二叉搜索树 BST&lt;a class=&#34;anchor&#34; href=&#34;#%e4%ba%8c%e5%8f%89%e6%90%9c%e7%b4%a2%e6%a0%91-bst&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre&gt;&lt;code&gt;若左子树不空，则左子树上所有结点的值均小于它的根结点的值；&#xA;若右子树不空，则右子树上所有结点的值均大于或等于它的根结点的值；&#xA;左、右子树也分别为二叉排序树；&#xA;没有键值相等的节点&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;平衡二叉树-avl树&#34;&gt;平衡二叉树 AVL树&lt;a class=&#34;anchor&#34; href=&#34;#%e5%b9%b3%e8%a1%a1%e4%ba%8c%e5%8f%89%e6%a0%91-avl%e6%a0%91&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;平衡二叉树（balanced binary tree）,又称 AVL 树。它或者是一棵空树,或者是具有如下性质的二叉树：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;它的左子树和右子树都是平衡二叉树，&#xA;左子树和右子树的深度之差的绝对值不超过1。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;平衡二叉树是对二叉搜索树(又称为二叉排序树)的一种改进。二叉搜索树有一个缺点就是，树的结构是无法预料的，随意性很大，它只与节点的值和插入的顺序有关系，往往得到的是一个不平衡的二叉树。在最坏的情况下，可能得到的是一个单支二叉树，其高度和节点数相同，相当于一个单链表，对其正常的时间复杂度有O(log(n))变成了O(n)，从而丧失了二叉排序树的一些应该有的优点。&lt;/p&gt;&#xA;&lt;h4 id=&#34;b树&#34;&gt;B树&lt;a class=&#34;anchor&#34; href=&#34;#b%e6%a0%91&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;BTree是平衡搜索多叉树，设树的度为2d（d&amp;gt;1），高度为h，那么BTree要满足以下条件：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;每个叶子结点的高度一样，等于h；&#xA;每个非叶子结点由n-1个key和n个指针point组成，其中d&amp;lt;=n&amp;lt;=2d,key和point相互间隔，结点两端一定是key；&#xA;叶子结点指针都为null；&#xA;非叶子结点的key都是[key,data]二元组，其中key表示作为索引的键，data为键值所在行的数据；&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;b树-1&#34;&gt;B+树&lt;a class=&#34;anchor&#34; href=&#34;#b%e6%a0%91-1&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;B+Tree是BTree的一个变种，设d为树的度数，h为树的高度，B+Tree和BTree的不同主要在于：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;B+Tree中的非叶子结点不存储数据，只存储键值；&#xA;B+Tree的叶子结点没有指针，所有键值都会出现在叶子结点上，且key存储的键值对应data数据的物理地址；&#xA;B+Tree的每个非叶子节点由n个键值key和n个指针point组成；&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;索引&#34;&gt;索引&lt;a class=&#34;anchor&#34; href=&#34;#%e7%b4%a2%e5%bc%95&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;聚簇索引和非聚簇索引也叫聚集和非聚集&#34;&gt;聚簇索引和非聚簇索引（也叫：聚集和非聚集）&lt;a class=&#34;anchor&#34; href=&#34;#%e8%81%9a%e7%b0%87%e7%b4%a2%e5%bc%95%e5%92%8c%e9%9d%9e%e8%81%9a%e7%b0%87%e7%b4%a2%e5%bc%95%e4%b9%9f%e5%8f%ab%e8%81%9a%e9%9b%86%e5%92%8c%e9%9d%9e%e8%81%9a%e9%9b%86&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;MyISAM 非聚簇索引&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;MyISAM存储引擎采用的是非聚簇索引，非聚簇索引的主索引和辅助索引几乎是一样的，只是主索引不允许重复，不允许空值，他们的叶子结点的key都存储指向键值对应的数据的物理地址。&lt;em&gt;&lt;strong&gt;非聚簇索引的数据表和索引表是分开存储的&lt;/strong&gt;&lt;/em&gt;。非聚簇索引中的数据是根据数据的插入顺序保存。因此非聚簇索引更适合单个数据的查询。插入顺序不受键值影响。&lt;/p&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;InnoDB 聚簇索引&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;p&gt;聚簇索引的主索引的叶子结点存储的是键值对应的数据本身，辅助索引的叶子结点存储的是键值对应的数据的主键键值。因此主键的值长度越小越好，类型越简单越好。&lt;em&gt;&lt;strong&gt;聚簇索引的数据和主键索引存储在一起&lt;/strong&gt;&lt;/em&gt;。聚簇索引的数据是根据主键的顺序保存。因此适合按主键索引的区间查找，可以有更少的磁盘I/O，加快查询速度。&lt;/p&gt;&#xA;&lt;p&gt;但是也是因为这个原因，聚簇索引的插入顺序最好按照主键单调的顺序插入，否则会频繁的引起页分裂，严重影响性能。在InnoDB中，如果只需要查找索引的列，就尽量不要加入其它的列，这样会提高查询效率。&lt;/p&gt;&#xA;&lt;img src=&#34;https://www.yeqown.xyz/images/index_0.jpg&#34;/&gt;&#xA;&lt;h4 id=&#34;索引类型&#34;&gt;索引类型&lt;a class=&#34;anchor&#34; href=&#34;#%e7%b4%a2%e5%bc%95%e7%b1%bb%e5%9e%8b&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;主键索引：根据主键pk_clolum（length）建立索引，不允许重复，不允许空值。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
