索引的优缺点是什么

  • 数据是存储在磁盘上的,操作系统读取磁盘的最小单位是块,如果没有索引,会加载所有的数据到内存,依次进行检索,加载的总数据会很多,磁盘IO多。
  • 如果有了索引,会以某个列为key创建索引,MySQL采用B+树结构存储,一方面加载的数据只有某个列和主键ID,另一方便采用了多叉平衡树,定位到指定某个列的值会很快,根据关联的ID可以快速定位到对应行的数据所以检索的速度会很快,因为加载的总数据很少,磁盘IO少。
  • 可见,索引可以大大减少检索数据的范围、减少磁盘IO,使查询速度很快,因为磁盘IO是很慢的,是由它的硬件结构决定的。

优点

  • 索引能够提高数据检索的效率,降低数据库的IO成本。
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性,创建唯一索引。
  • 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
  • 加速两个表之间的连接,一般是在外键上创建索引。

缺点

  • 需要占用物理空间,建立的索引越多需要的空间越大
  • 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
  • 会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长 

何时应该创建索引

  • 主键,自动建立唯一索引
  • 频繁作为查询的条件的字段
  • 查询中与其他表关联的字段存在外键关系
  • 查询中排序的字段,排序字段若通过索引去访问将大大提高排序的速度
  • 查询中统计或者分组字段

避免创建索引的情况

  • 数据唯一性差的字段不要使用索引(比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。)
  • 频繁更新的字段不要使用索引(比如登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。)
  • 字段不在where语句出现时不要添加索引(只有在where语句出现,mysql才会去使用索引)
  • 数据量少的表不要使用索引(数据量小时,基本改善不大)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频学习(二十)——rtsp收流(udp方式)

前言 本文主要介绍通过udp方式实现rtsp拉流。 流程图 流程说明: 相较于tcp方式“信令数据”复用同一连接拉流,udp方式拉流“信令数据”采用不同的连接,信令传输采用tcp,流数据传输采用udp;客户端向服务端&#xff0…

数据库增删改查(CRUD)进阶版

目录 数据库约束 约束类型 表的设计 1.一对一 2.一对多 3.多对多 增删查改进阶操作 1. 插入查询结果 2.查询 聚合查询 聚合函数 group by having 联合查询 内连接 外连接 自连接 子查询 合并查询 数据库约束 创建表的时候制定的一些规则,在后续…

在Windows 10或11中,复制和粘贴不起作用,不一定是键盘的问题

以下建议将帮助你解决复制和粘贴无法正常工作的问题。 以下提示主要适用于Windows 10和Windows 11,但也可能解决旧版本Windows上的复制和粘贴问题。 为什么我的复制粘贴不起作用 复制和粘贴不起作用的问题可能以以下方式之一出现。 其他正在运行的应用程序或进程可能会使用…

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于北方苍鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.参考…

生成式人工智能笔记-AIGC笔记

生成式人工智能笔记-AIGC笔记 十多年前,人工智能还只是一个不被人看好的小众领域,但是现在,它却已经成了街头巷尾的热点谈资,几乎任何事情都可以和人工智能联系在一起。 人工智能包括基础层、技术层和应用层。 基础层是人工智能…

收藏!当今最流行的10 种人工智能算法

人工智能的概念始于1956年的达特茅斯会议,由于受到数据、计算力、智能算法等多方面因素的影响,人工智能技术和应用发展经历了多次高潮和低谷。 2022年以来,以ChatGPT为代表的大模型一夜爆火,它能够基于在预训练阶段所见的模式和统…

Python中如何判断List中是否包含某个元素

更多资料获取 📚 个人网站:ipengtao.com 在Python中,判断一个列表(List)是否包含某个特定元素是常见的任务之一。在本文中,将深入探讨多种判断List成员包含性的方法,并提供丰富的示例代码&…

二、C#笔记

/// <summary> /// 第三章&#xff1a;方法和作用域 /// </summary> namespace Chapter3 { class Program { public static void Main(string[] args) { //3.1创建方法 Console.WriteLine($"{addValues(1, 2…

每日一题:LeetCode-11.盛水最多的容器

每日一题系列&#xff08;day 13&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

UVa133救济金发放题解

题目 题目描述 n(n<20)个人站成一圈&#xff0c;逆时针编号为 1~n。有两个官员&#xff0c;A从1开始逆时针数&#xff0c;B从n开始顺时针数。在每一轮中&#xff0c;官员A数k个就停下来&#xff0c;官员B数m个就停下来&#xff08;两个官员有可能能停在同一个人上&#xff…

solidity案例详解(六)服务评价合约

有服务提供商和用户两类实体&#xff0c;其中服务提供商部署合约&#xff0c;默认诚信为true&#xff0c;用户负责使用智能合约接受服务及评价&#xff0c;服务提供商的评价信息存储在一个映射中&#xff0c;可以根据服务提 供商的地址来查找评价信息。用户评价信息&#xff0c…

添加新公司代码的配置步骤-Part1

原文地址&#xff1a;配置公司代码 概述 我们生活在一个充满活力的时代&#xff0c;公司经常买卖子公司。对于已经使用 SAP 的公司来说&#xff0c;增加收购就成为一个项目。我开发了一个电子表格&#xff0c;其中包含向您的结构添加新公司代码所需的所有配置更改。当然&…

c++算术生成算法二

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<functional> #include<vector> #include<algorithm> #include<numeric>//算术生成算法头文件 #include<string> #include<ctime> using namespace std; set_intersec…

虚拟数据优化器VDO

本章主要介绍虚拟化数据优化器。 什么是虚拟数据优化器VDO创建VDO设备以节约硬盘空间 了解什么是VDO VDO全称是Virtual Data Optimize&#xff08;虚拟数据优化)&#xff0c;主要是为了节省硬盘空间。 现在假设有两个文件file1和 file2&#xff0c;大小都是10G。file1和 f…

第63天-django学习(十二)

补充模块importlib 介绍 importlib模块是Python中用于动态加载和导入模块的内置模块。它提供了一组函数和类&#xff0c;使得我们可以在运行时根据需要加载模块&#xff0c;并且可以对已导入的模块进行操作和管理。 动态加载模块 # 导入模块 &#xff1a; 动态加载一个模块 i…

java学习part40collections工具类

162-集合框架-Collections工具类的使用_哔哩哔哩_bilibili 1.collections工具类 感觉类似c的algorithm包&#xff0c;提供了很多集合的操作方法 2.排序 3.查找 4.复制替换 5.添加&#xff0c;同步

Dockerfile详解#如何编写自己的Dockerfile

文章目录 前言编写规则指令详解FROM&#xff1a;基础镜像LABEL&#xff1a;镜像描述信息MAINTAINER&#xff1a;添加作者信息COPY&#xff1a;从宿主机复制文件到镜像中ADD&#xff1a;从宿主机复制文件到镜像中WORKDIR&#xff1a;设置工作目录 前言 Dockerfile是编写docker镜…

TensorRT之getBindingIndex

在使用 TensorRT&#xff08;NVIDIA 的推理引擎&#xff09;时&#xff0c;getBindingIndex 是一个用于获取绑定索引的函数。TensorRT 将输入和输出张量绑定到引擎的输入和输出索引上。getBindingIndex 函数用于检索给定名称的输入或输出张量在引擎中的索引。 int getBindingI…

【Python百宝箱】极客之选:掌握Python内外库的进程管理技巧

Python系统编程大揭秘&#xff1a;掌握操作系统接口、进程管理与系统信息 前言 在当今软件开发领域&#xff0c;系统编程是一项至关重要的技能&#xff0c;尤其是在涉及到操作系统接口、进程管理以及系统信息的处理时。Python作为一门强大而灵活的编程语言&#xff0c;提供了…

马克思主义原理期末复习大题

导论: 1.什么是马克思主义?马克思主义具有哪些基本特征? 马克思主义是由马克思和恩格斯创立并为后继者所不断发展的科学理论体系,是关于自然,社会和人类思维发展一般规律的学说,是关于社会主义必然代替资本主义,最终实现共产主义的学说,是关于无产阶级解放,全人类解…