服务器学习心得


索引介绍

<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>

页面列表

ITEM_HTML