互联网开发文档

互联网开发文档


Mysql文字笔记

<h1>1.索引</h1> <ul> <li> <p>Hash索引:</p> <ul> <li>每条记录的hash码具有随机性,逻辑上连续的数据在物理上不具有存储连续性</li> <li>适合于精确查询,不适用于范围查询</li> <li>如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题</li> </ul> </li> <li>B+树索引: <ul> <li>相对于B树而言,B+树由于每个节点只存储索引,所以可以存储更多索引,磁盘I/O次数更少</li> <li>如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题</li> <li>B+ 所有关键字数据地址都存在叶子节点上,所以每次查找的次数都相同所以查询速度要比B树更稳定</li> <li>B+ 树遍历整棵树只需要遍历所有的叶子节点即可,,而不需要像 B 树一样需要对每一层进行遍历,这有利于数据库做全表扫描</li> </ul></li> <li> <p>聚簇索引:</p> <ul> <li>索引顺序与数据物理存储顺序一致</li> <li>叶子结点是数据节点</li> <li>一张表只允许存在一个聚簇索引</li> </ul> </li> <li> <p>联合索引:遵循最左前缀匹配原则</p> <ul> <li>假设学生表t_student有联合索引(classId,name,age)</li> <li><code>SELECT * FROM t_student WHERE age=1</code>不会用到索引</li> <li><code>SELECT * FROM t_student WHERE classId &gt; 1 AND classId &lt; 4 and name &gt; a AND name &lt; x</code>只要联合索引的最左侧列有效,其他的都无法使用到索引</li> <li><code>SELECT * FROM student WHERE classId = 1 AND name &gt; a AND name &lt; x</code> calssId 是走索引的,其次 name 也是走索引的</li> </ul> </li> <li>回表:根据非主键索引查询到的结果并没有查找的字段值,此时就需要再次根据主键从聚簇索引的根节点开始查找,这样再次查找到的记录才是完成的。</li> </ul>

页面列表

ITEM_HTML