码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 弄清数据库索引的来龙去脉


    前言

    本文不讲“索引是什么和索引如何创建”这类问题,本文从索引建立时发生了什么 讲到 索引与B+树的关系 再讲到索引如何作用于查找,能在一定程度上深入理解索引

    索引这个老大难问题一直是我在多年的数据库学习过程中每次都会看,但是一直搞不太懂的部分。
    每次查资料都只有“索引是什么和索引如何创建”这类回答
    但我一直困惑于一下几个问题:

    1. 索引在哪里用,怎么用?
    2. 索引如何作用于查找过程并最终使查找速度变快
    3. 索引与B+树这种数据结构之间有什么关系【注:在本文仅讨论B+树索引的情况】
    4. 索引、表、记录、查询之间是怎么关联起来的

    分析索引

    要了解索引,我们首先要清除索引构建了一个什么数据结构——这个结构便是B+树

    B+树
    我们结合B+树的图和SQL语句来理解:

    1. CREATE INDEX 索引名 ON 表名(列名1)
    2. CREATE INDEX 索引名 ON 表名(列名1,列名2,列名3)
    
    • 1
    • 2

    以第一句SQL为例,在建立索引时,我们是针对列1建立的索引【假设列名1为ID列,具体为1-15】。
    那么此时会用所有行的Col1作为数据以字典序构建B+树【即1-15】;此时我们观察B+树的结构,每一个树的所有节点其实都是只存放Col1的所有数据【即一个int型变量】,而每个数据都对应着一个记录【】即数据表中的一列】,这刚好与B+树的实际Data是在叶子结点下面的非常契合

    建立索引可以理解为 :用所有行此列的数据作为B+树的节点去建立一个B+树
    对于第二句SQL创建的复合索引(A,B,C),会建立三颗即以(A)、(A,B)、(A,B,C)为结点数据的B+树

    数据库在查询的时候——select时where语句是要找哪个列或者哪几个列,如果已经建立了索引,那就可以把查找时间复杂度降为O(logn)
    【所以在数据库建表的时候如何高效地建立索引? 看什么列在where语句里出现得多】

    注:几个会直接屏蔽索引的情况(即以O(n)的时间复杂度查找)

    • 一般的返回查询都可以走索引;;例外为:Between关键字的范围查询、!=、查询字段未被索引覆盖的范围查询
    • 运算于索引列上
    • 字符串不加引号
    • 遇见like就不用索引
    • 只有or前后都有索引才有用
  • 相关阅读:
    【洛谷 P2440】木材加工 题解(二分查找+循环)
    如何创建一个自己的sphinx文档网站
    STM32CubeMX新建工程并点亮一个LED
    【使用 BERT 的问答系统】第 5 章 :BERT模型应用:问答系统
    源码解析之——ReentrantLock
    用btcdeb工具学会Bitcoin Script中应当要学会的指令--中山大学软件工程学院专选课区块链原理与技术实验Lab7
    H7-TOOL发布V2.18,脱机烧录新增芯海,辉芒微,武汉芯源,领芯等,支持了扫描枪,带来LUA写文件API,可以做日志或者数据记录了
    2022“杭电杯”中国大学生算法设计超级联赛(3)题解
    机器人中的数值优化|【四】L-BFGS理论推导与延伸
    路由Import&Control
  • 原文地址:https://blog.csdn.net/qq_33164724/article/details/126369821
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号