MySQL数据库:索引

news2024/11/8 17:04:04

一、索引简介

1.概念

        索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

        相当于是给数据库中的数据建立了一个目录,通过目录可以知道数据所在位置,然后到指定位置取出数据即可。

2.作用

        大大提高数据的查询效率。

3.原理

        索引其实就是针对指定字段创建的一个便于查询的数据结构,但是不同的存储引擎有不同的数据结构,本文中后续的示例采用的是MySQL数据库的innodb存储引擎。

innodb存储引擎:采用的索引结构为B+树。

简介B树与B+树的区别:

        B树每个节点都存储了数据,通过索引找到了节点,就直接找到了数据。

        B+树针对索引字段建立数据结构,每个节点中并不存储数据,而是保存数据在磁盘中的地址,数据在磁盘中是连续存储的。

为什么B+树中索引和数据分离存储,索引中存储的是数据的地址?

        在一次磁盘IO中,可以读取更多的索引数据,在检索索引时可以减少IO次数。

二、聚簇索引和非聚簇索引

1. 聚簇索引

(1)通常是针对主键建立主键索引,且一张表中只能有一个主键索引,其他索引都是普通(辅助)索引。

(2)主键索引和数据在磁盘中都是顺序存储的,且索引顺序与数据的实际存储顺序保持一致。

(3)辅助索引是针对主键值做的索引。即辅助索引节点存储的是主键索引字段的值,相当于是先通过辅助索引,找到主键索引值,再通过主键索引值,在主键索引中查找数据存储位置。

2.非聚簇索引

(1)主键索引和普通(辅助)索引没有太大区别,节点中都是保存数据的存储地址。

(2)索引和数据的实际存储顺序不一定保持一致,即数据在磁盘中不一定是按序存储的。

3.区别与联系

联系:聚簇与非聚簇索引都是采用B+树来构建索引。

区别:在构建索引时的思想不同。

4.适用场景

4.1聚簇索引

(1)优点

        索引和数据都是按序存储,因此在范围查询上效率更高,因为查找到一个数据后可以连续取出。

例如:查询某个字段大于5的数据,找到第一个大于5的数据后,就可以直接往后连续取出即可。

(2)缺陷

        ①在中间插入数据时,为了保持顺序存储,需要重新调整索引和数据的存储顺序。

        ②普通索引查询时,需要通过主键索引值在主键索引中进行二次查询。

(3)避免中间插入方法

        因此聚簇索引通常都是针对具有自增属性的主键id创建,这样就可以尽可能的避免中间插入。

4.2非聚簇索引

(1)优点

        ①普通索引查询效果也很好,不需要二次检索索引。

        ②在中间插入和删除数据影响不大,不需要调整数据的存储位置,只需要调整索引即可。

(2)缺陷

        范围查找效率不如聚簇索引:因为数据不一定按序存储,每次都需要通过索引去重新获取下一条数据的存储位置。

5.MySQL数据索引类型

(1)Innodb存储引擎:聚簇索引。

(2)MyISAM存储引擎:非聚簇索引。

三、索引操作

1.查看索引

(1)show keys from 表名;

(2)show index from 表名;

(3)desc 表名

2.创建索引

2.1自动创建

        MySQL数据库会自动对主键、唯一键、外键字段创建索引。

2.2普通索引创建

(1)在表的定义最后指定某列为索引

create table user(id int primary key, name varchar(10), sex varchar(2), index(name));

(2) 创建完表后,指定某列为普通索引

alter table user add index(sex);

 (3)为某张表的某个字段创建索引

create index 索引名 on 表名(字段名);

 3. 删除索引

(1)删除主键索引

alter table 表名 drop primary key;

(2)删除其他索引

alter table 表名 drop index 索引名;

索引名:show keys from 表名;结果中的Key_name字段。

 (3)drop index 索引名 on 表名;

四、索引创建原则

1.创建原则

(1)经常作为查询条件的字段适合创建索引。

(2)唯一性差的字段不适合单独创建索引,即使频繁作为查询条件。

(3)更新比较频繁的字段,不适合创建索引。

2.索引不是越多越好

(1)索引会单独建立一张表,占据额外的磁盘空间。

(2)索引可以提高查询效率,但是会增加增删改的时间成本。

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

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

相关文章

QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。

QT多线程5种用法第一种 主线程(GUI)第二种 子线程1继承自QThread头文件 movetothread4.h源文件 movetothread4.cpp子线程1对象的创建第二种 子线程2继承自QThread头文件源文件对象创建位置(销毁)第三种 子线程3继承自QThread头文件源文件对象的创建第四种…

基于matlab仿真机械手

一、前言该示例显示了处于主动立体视觉模式的操纵器。它说明了立体渲染属性的效果以及如何使用立体视觉 VRFIGURE 属性。仅当图形卡支持四缓冲 OpenGL 渲染并由图形卡驱动程序启用时,操纵器才会以活动立体视觉模式显示。请注意,只有当您使用带有主动快门…

Android 布局 Fragment

Android 布局 FragmentFragment出现的初衷生命周期onCreate()onPause()onAttach()onCreateView()onActivityCreated()onDestroyView()onDetach()您可能还想扩展几个子类,而非 Fragment 基类:DialogFragmentListFragmentPreferenceFragmentCompat同系列文…

2.3.2单链表的插入删除

按位序插入(带头结点) 将第i-1个结点的指针指向第i个结点。 头节点看作是第0个结点。 s->datae //设定s指针的数据域为e s->nextp->next //将p指针指向的位置赋值给s指针指向的位置 p->nexts //再将s的数据域赋值给p指针指向的位置…

浅析分布式理论的CAP

大家好,我是易安! 今天让我们来聚焦于分布式系统架构中的重要理论——CAP理论。在分布式系统中,可用性和数据一致性是两个至关重要的因素,而CAP理论就是在这两者之间提供了一种权衡的原则,帮助我们在设计分布式系统时进…

MATLAB基于BP神经网络的光伏发电太阳辐照度预测(源码链接在文末)

光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp神经网络对分解的辐照度数据分别预测,再组合作为最后的预测结果。 人工神经网络(Artificial Neural …

研0进阶式学习---数据库1

目录Excel和数据库数据库的分类数据库的举例数据库基本结构数据库管理系统xampp、Navicat、MySQL基础知识与界面展示数据库基本连接步骤Excel和数据库 Excel和数据库都是用来存储数据的工具,但它们有以下区别和联系: 区别: 数据类型&#…

Java实现内网穿透

使用场景 1、当公司的一些系统功能使用了第三方服务时,通常第三方会回调我们的接口。在对接阶段,为了方便debug,我们肯定希望能回调到我们本地电脑上来。 2、当你在公司想访问部署在家里电脑的服务或者文件时。 3、当你的外地同事想访问你…

搭建nginx反向代理实现动静态分离

搭建nginx反向代理实现动静态分离一、实现高可用动静分离二 实验步骤2.1 安装nginx和开启路由转发2.2 实现lvs负载均衡2.3 实现动态网页功能2.4 实现nginx反向代理2.5 重启服务网页查看一、实现高可用动静分离 1、部署目的 ①用户访问业务时访问虚拟ip由lvs负责转发请求到业务…

LAMP及论坛搭建

1.编译安装apache 关闭防火墙,将安装Apache所需软件包传到/opt目录下 systemctl stop firewalld.service setenforce 0[rootlocalhost opt]# lsapr-1.6.2.tar.gz apr-util-1.6.0.tar.gz httpd-2.4.29.tar.bz2安装环境依赖包 yum -y install gcc gcc-c make pc…

淘宝商品数据分析怎么操作?从哪些方面下手?

说起淘宝上面的商品可谓是成千上万,因此要是想对这些商品进行数据分析的话,也是需要一些技能的,并不是所有的数据都特别重要,我们需要学会选择比较重要的数据来进行分析。详细内容还请各位接着往下看! 一、根据淘宝指数分析以下相…

【JSP学习笔记】2.JSP 结构、生命周期及语法

前言 本章介绍JSP的结构、生命周期及语法。 JSP 结构 网络服务器需要一个 JSP 引擎,也就是一个容器来处理 JSP 页面。容器负责截获对 JSP 页面的请求。本教程使用内嵌 JSP 容器的 Apache 来支持 JSP 开发。 JSP 容器与 Web 服务器协同合作,为JSP的正…

springboot读取yml文件中的list列表、数组、map集合和对象方法实例

目录前言application.yml定义list集合application.yml定义数组类型总结 前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型&#x…

MySQL数据库 - 基础篇

本文文章基于黑马《MySQL》课程所做的笔记 1、基础篇 1.1、MySQL概述 数据库相关概念 名称全称简介数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程…

ijkplayer 编译增加支持更多的音视频格式

ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多…

最新版本 Stable Diffusion 开源 AI 绘画工具之图生图进阶篇

✨ 目录🎈 图生图基本参数🎈 图生图(img2img)🎈 涂鸦绘制(Sketch)🎈 局部绘制(Inpaint)🎈 涂鸦蒙版(Inpaint sketch)&…

Adams2020软件安装教程

目录 一、软件简介 二、软件下载 三、软件安装 一、软件简介 Adams是一款多领域仿真软件,可以对机械、电子、流体、化学等系统进行建模、仿真和分析。Adams具有强大的动力学分析功能,可以模拟多种复杂系统的运动、力学、热力学和控制行为,包…

点云目标检测:open3d多窗口联动可视化

多个模型之间的对比除了指标之外,还需要可以直观的对比可视化结果,这次介绍一下如何使用open3d同时打开两个窗口分别加载两个模型的结果,同时实现两个窗口的联动,也就是当一个窗口拖动或者缩放时另外一个窗口也跟着做同样的变换。 点云可视化:使用open3d实现点云连续播放这…

nginx虚拟主机

一、基于域名的nginx虚拟主机 1、基于域名的nginx虚拟主机的操作步骤 1.1 为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "192.168.2.66 www.xkq.com www.wy.com" >> /etc/hosts1.2 为虚拟主机准备网页文档 mkdir -p /var/www/html/ly/ mkdir…

第一章 深度学习入门之流程初体验

效果图 文章中采用的是棋盘格数据,这张图里面用的是开源的模型,可以用于测试,此图为最终效果,加载mp4视频,通过opencv读取图像,传递到infer接口,进行推理识别,利用opencv显示出来 …