索引介绍
<ul>
<li><a href="https://www.bilibili.com/video/BV1pA411H7Vd?p=5">https://www.bilibili.com/video/BV1pA411H7Vd?p=5</a></li>
</ul>
<h2>索引前了解问题</h2>
<h4>1-mysql数据存储在什么地方?</h4>
<ul>
<li>存储在磁盘,查询速度慢,一般卡在磁盘I/O上</li>
</ul>
<h4>2-查询比较慢,一般卡在哪里?</h4>
<ul>
<li>一般卡在磁盘I/O上
<ul>
<li>I/O,输入\输出,在磁盘上可以理解为读写</li>
</ul></li>
<li>提高I/O效率
<ul>
<li>减少I/O次数</li>
<li>减少I/O量</li>
<li>在满足需求时,尽量减少I/O量,</li>
<li>如查询时不要使用select * 查询,要写具体查询字段,目的就是为了减少I/O量</li>
</ul></li>
</ul>
<h4>3-去磁盘读取数据时,是用多少取多少吗?</h4>
<p>这里建议看一下操作系统原理</p>
<ul>
<li>局部性原理
<ul>
<li>数据和程序都有聚集成群的倾向,之前被访问过的数据,有可能再次被查询。涉及到空间局部性,时间局部性</li>
</ul></li>
<li>磁盘预读
<ul>
<li>内存与磁盘数据发生交互时,一般有一个最小的逻辑单元,称之为页(datapage)</li>
<li>页一般由操作系统决定是多大,一般页4K或8K</li>
<li>在进行数据交互时,可以取页的整数倍进行读取</li>
<li>InnoDB存储引擎每次读取数据,读取16K</li>
</ul></li>
</ul>
<h4>4-索引存储在哪里?</h4>
<ul>
<li>存储在磁盘里,查询数据时,会优先中索引加载到内存中</li>
</ul>
<h4>5-索引在存储时需要什么信息?需要存什么字段值?</h4>
<ul>
<li>key,实际数据行中存储的值</li>
<li>文件地址</li>
<li>offset偏移量</li>
</ul>
<h4>6-这种数据格式,要使用什么样的数据结构进行存储?</h4>
<ul>
<li>key-value
<ul>
<li>哈希表,树(二叉树,红黑树,AVL树,B树,B+树)等</li>
</ul></li>
</ul>
<h4>7-mysql索引系统中为什么不是使用key-value的存储格式存储?</h4>
<ul>
<li>OLAP(联机分析处理)
<ul>
<li>对海量历史数据进行分析,产生决策性的影响</li>
<li>对应为:数据仓库</li>
<li>使用技术:Hive</li>
<li>hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制</li>
</ul></li>
<li>OLTP(联机事务处理)
<ul>
<li>要求在很短时间内返回对应的结果</li>
<li>对应为:关系型数据库</li>
<li>使用技术,如mysql,oracle等</li>
</ul></li>
</ul>
<h2>索引分类</h2>
<ul>
<li>普通索引</li>
<li>唯一索引</li>
<li>主键索引</li>
<li>全文索引</li>
<li>组合索引</li>
</ul>
<h2>索引分类面试问到</h2>
<ul>
<li>索引分类有哪几类</li>
<li>分类回答上,会继续问一些名词
<ul>
<li>回表</li>
<li>最左匹配</li>
<li>索引覆盖</li>
<li>索引下推</li>
<li>如何根据索引优化查询</li>
</ul></li>
</ul>
<h2>通过索引优化</h2>
<ul>
<li>索引基本知识</li>
<li>哈希索引</li>
<li>组合索引</li>
<li>聚簇索引与非聚簇索引</li>
<li>覆盖索引</li>
<li>优化小细节</li>
<li>索引监控</li>
</ul>
<h2>B树与B+树区别</h2>
<ul>
<li>B树每个节点里都会存储数据</li>
<li>B+只有叶子里存储数据</li>
<li>因为树,磁盘空间会被数据库大量占用。树深度会变得非常深,导致I/O次数就会变多,查询性能会变低</li>
</ul>