数据库查询优化 --- 索引 Index

2023-11-10

什么是索引

  • 没有加索引的数据,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐
  • 因为数据是无序的, 查找时需要一行一行查找, 非常慢
  • 如果可以使用数据结构对数据进行储存, 可以大大减少查找时间

索引的实现方法

  • 主流的实现方法是使用B+树, B+是一个平衡二叉树
  • 将一个属性标为index, 则B+每个节点是属性的值,叶子节点为实际数据,这样可以通过B+树进行快速查找
  • 一般DBMS会自动根据主键建立索引,也就是自动将无序的数据转换成根据主键建立的B+树
  • 使用索引可以增加查询速度,但是会增删的速度会下降, 因为有可能要重构B+树
    在这里插入图片描述

聚集索引 和 非聚簇索引

聚集索引

  • 聚集索引在叶子节点中存放的就是整张表的实际数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分
  • 每张表只能拥有一个聚集索引(一般默认为主键)
  • 也就是聚集索引的索引和实际数据在磁盘上是存放在一起的, 叶子节点储存的就是实际数据
  • 聚集索引需要满足以下两个条件:
  • The data or file, that you are moving into secondary memory should be in sequential or sorted order.
  • There should be a key value, meaning it can not have repeated values.

非聚集索引

  • 非聚集索引的数据和索引存放在不同的地方, 非聚集索引的叶子节点储存的是指向实际数据的指针
  • 一个表可以有多个非聚集索引

组合索引

  • 当查询涉及多个字段时, 可以对字段分别建立索引: 查找每个索引里匹配项,针对同时匹配两个索引的名单扫面它们页码的交集
  • 但是这样比较慢, 可以使用组合索引,使用多个字段建立一个索引
  • 但是建立复合索引,在更新时肯定会付出比单索引更大的代价

索引的使用

适合使用索引的场景

1.设置主键为索引。

2.当某个字段频繁的作为查询参数,查询条件的字段也建议使用,比如号码,唯一,且查询频率高

3. 外键也适合加上索引

3.排序的字段,当我们对一些数据量较大的表进行一个查询且排序,
例如日志表,都会使用到创建时间作为排序字段,并且来说,这些表的数据量都不小,这个时候,我们建立索引会有明显的效率提升。

4.还有我们做统计数据的时候,通常会对该字段进行一种数据的汇总统计,
在分组查询的时候也是一样的意思,这个时候,也建议建立索引。

不适合使用索引的场景

1.表记录较少,你一共就10条数据,我还建立一个索引?可能索引的数据存储都比实际数据都多。

2.还有一种就是上面已经说到的,高频的增删改表。比如流水表,秒级的增加数据。这种表结构,我们通常不建议。

3.查询条件几乎用不到的字段

4.还有就是那种,你选择他作为查询条件,但是几乎没有条件过滤的感觉的字段。
例如,性别,你说你查询男和女有多大的过滤?

SQL创建索引

CREATE INDEX index_name ON table_name (column_name)
CREATE INDEX MAIN_CATEGORY_NAME_INDEX ON BUSINESS_MAIN_CATEGORIES(main_category);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库查询优化 --- 索引 Index 的相关文章

随机推荐

  • React 实现井字棋游戏 (tic-tac-toe) 教程 (5) <译自官方文档>

    React 实现井字棋游戏 tic tac toe 教程 1 lt 译自官方文档 gt React 实现井字棋游戏 tic tac toe 教程 2 lt 译自官方文档 gt React 实现井字棋游戏 tic tac toe 教程 3 l
  • 如何解决VS中scanf使用时报错或无法使用的问题

    目录 前言 1 问题 2 问题原因 3 如何解决 4 如何设置 总结 前言 新手上手VS想必都会遇到这个问题 在使用scanf时会出现警告 或者直接报错导致程序终止的问题 今天我就向大家讲解一下如何解决这个问题 1 问题 初识c语言的同学在
  • 解决gateway报错org.springframework.cloud.gateway.support.NotFoundException: Unable to find instance for

    gateway报错 org springframework cloud gateway support NotFoundException Unable to find instance for localhost 配置 浏览器访问 htt
  • Python实现中国移动提出的ABCDNETS和DSSN数联网技术介绍

    Python实现中国移动提出的ABCDNETS和DSSN数联网技术介绍 随着网络技术的发展 数联网技术成为了未来网络的关键技术之一 在这个方向上 中国移动提出了ABCDNETS和DSSN两种不同的数联网技术 分别针对不同应用场景进行优化 本
  • textarea文字垂直居中_word小技巧:制作封面时将文字置于页面中心

    有时侯我们需要将文字放置于页面的中间 水平居中和垂直居中 特别是在做封面的时侯 水平居中比较简单 但是发现如果要将一个或多个文字垂直居中处理确没有直接的办法 诸如PS CDR等专业排版软件要垂直居中非常容易 word里面要垂直居中可以通过下
  • django保存表单数据到数据库中

    这一部分涉及一下几个模块 前端HTML表单 表单验证的Form 数据库结构Model 后端处理的View 文章目录 前端HTML 表单验证Form 数据库结构Model 后端处理的View 更多数据库操作 前端HTML 网页文件 save
  • 【校招VIP】java开源框架之Zookeeper

    考点介绍 ZooKeeper是一个分布式的 开放源码的分布式应用程序协调服务 主要为了解决分布式架构下数据一致性问题 典型的应用场景有分布式配置中心 分布式注册中心 分布式锁 分布式队列 集群选举 分布式屏障 发布 订阅等场景 本期分享的j
  • python自动化访问百度地图

    要在 Python 中自动化访问百度地图 你可以使用第三方库 selenium 来实现 Selenium 是一种自动化测试工具 可以模拟用户在浏览器上执行操作 首先 你需要安装 Selenium 可以通过运行以下命令来安装它 pip ins
  • Go语言面试题--基础语法(16)

    文章目录 1 f1 f2 f3 函数分别返回什么 2 下面代码段输出什么 3 关于channel的特性 下面说法正确的是 1 f1 f2 f3 函数分别返回什么 func main fmt Println f1 fmt Println f2
  • 【HDLBits 刷题 13】Buliding Larger Circuits

    目录 写在前面 Buliding Larger Circuits count1k shiftcount fsm seq fsmshift fsm fancytimer fsm onehot 写在前面 以下的解题方法不一定为最佳解决方案 有更
  • 构造树型结构数据

    构造树型结构数据 param data 数据源 param id id字段 默认 id param parentId 父节点字段 默认 parentId param children 孩子节点字段 默认 children export fu
  • AUC的计算、物理意义,

    文章目录 一 定义 二 性质 三 计算 3 1 方法一 根据定义 3 2 方法二 根据意义 3 3 方法三 方法二优化 3 4 方法四 工业场景 四 物理意义推导 一 定义 ROC曲线与坐标轴围成的面积 ROC曲线由不同阈值下 TPR Y轴
  • Linux内核在I386架构下的内存管理

    转载自 http blog csdn net li shyng article details 5545973 同类型的 http www kerneltravel net journal ii I386是Intel的x86系列CUP中一个
  • 前端页面有那三层构成,分别是什么?作用是什么?

    结构 表现和行为 其中结构主要是有HTML标签组成 结构即在页面body里面我们写入的标签都是为了页面的结构 表现即指css样式表 通过css可以是页面的结构标签更具美感 行为是指页面和用户具有一定的交互 同时页面结构或者表现发生变化 主要
  • 接口测试工具-apifox

    Apifox 是 API 文档 API 调试 API Mock API 自动化测试一体化协作平台 定位 Postman Swagger Mock JMeter 通过一套系统 一份数据 解决多个系统之间的数据同步问题 只要定义好 API 文档
  • 将一个网页设置为屏保

    有没有试过将一个网页作为屏保 最近我正好有这个需求 一些需要给家里人经常看到的提示信息 如果定闹钟多了大家嫌烦 我口头提示多了比闹钟还烦 印在A4纸上贴墙上既影响美观又不容易修改内容 打印还要花银子 自己写字又不好看 突然想到我几乎每天早上
  • Unity播放音频

    在Unity中 可以在物体上添加AudioSource组件来播放音频 AudioSource组件可以控制音频文件的播放 音量 音调 空间效果等属性 以下是在物体上添加AudioSource组件的步骤 1 在Unity中打开场景 选择您想要添
  • tensorflow-gpu 2.3.0安装 及 相关对应版本库安装(Anaconda安装)

    目录 如需转载 请标明出处 谢谢 一 安装tensorflow gpu2 3 0 二 配置其他相关的库 很多人以为安装完tensorflow gpu就是一切都结束了 但是殊不知 python中的很多库 比如numpy matplotlib等
  • 【JavaScript数据结构与算法】一、栈及leetcode实战

    栈 栈是一种遵从后进先出 LIFO 原则的有序集合 新添加或待删除的元素都保存在栈的同一端 称作栈顶 另一端就叫栈底 在栈里 新元素都靠近栈顶 旧元素都接近栈底 栈数据结构 我们需要一种数据结构来保存栈里的元素 可以选择数组 数组允许我们在
  • 数据库查询优化 --- 索引 Index

    数据库查询优化 索引 Index 什么是索引 索引的实现方法 聚集索引 和 非聚簇索引 聚集索引 非聚集索引 组合索引 索引的使用 适合使用索引的场景 不适合使用索引的场景 SQL创建索引 什么是索引 没有加索引的数据 它的数据无序的放置在