MySQL之索引初步

1. 索引概念

数据库是⽤来存储数据,在互联⽹应⽤中数据库中存储的数据可能会很多(⼤数据), 数据表中数据的查询速度会随着数据量的增⻓而逐渐变慢 ,从⽽导致响应⽤户请求的速度变慢——⽤户体验差,我们如何提⾼数据库的查询效率呢?

索引,就是⽤来提⾼数据表中数据的查询效率的
索引,就是将数据表中某⼀列/某⼏列的值取出来构造成便于查找的结构进⾏存储,⽣成数据表的 ⽬录。当我们进⾏数据查询的时候,则先在 ⽬录 中进⾏查找得到对应的数据的地址,然后再到数据表中根据地址快速的获取数据记录,避免全表扫描。
这个过程就好比从新华字典里查字一样。

2. 索引分类

MySQL中的索引,根据创建索引的列的不同,可以分为:
(1)主键索引:在数据表的主键字段创建的索引,这个字段必须被primary key修饰,每张表只能有⼀个主键;
(2)唯⼀索引:在数据表中的唯⼀列创建的索引(unique),此列的所有值只能出现⼀次,可以为NULL;
(3)普通索引:在普通字段上(可以是多个)创建的索引,没有唯⼀性的限制;
(4)全文索引:查找的是文本中的关键词,而不是比较索引中的值。

说明 :
a. 在创建数据表时,将字段声明为主键(添加主键约束),会⾃动在主键字段创建主键索引;
b. 在创建数据表时,将字段声明为唯⼀键(添加唯⼀约束),会⾃动在唯⼀字段创建唯⼀索引。

3. 创建索引

(1)唯一索引

-- 创建唯⼀索引: 创建唯⼀索引的列的值不能重复
-- create unique index 索引名 on 表名(列名);
-- 为name字段创建索引
create unique index index_test1 on student(name); 

(2)普通索引

create index index_test2 on student(age); 
create index index_test3 on student(name, age);  

(3)全文索引
MySQL 5.6 版本新增的索引,可以通过此索引进⾏全⽂检索操作,因为MySQL全⽂检索不⽀持中⽂,因此这个全⽂索引不被开发者关注,在应⽤开发中通常是通过搜索引擎(数据库中间件)实现全⽂检索。

4. 索引使用

索引创建完成之后⽆需调⽤,当根据创建索引的列进⾏数据查询的时候,会⾃动使⽤索引
组合索引需要根据创建索引的所有字段进⾏查询才能触发

select * from student where name="范瑶"; 
-- 组合索引需要根据创建索引的所有字段进⾏查询
-- select * from student where name="范瑶"; 不会触发索引
 
select * from student where name="范瑶" and age=25; 

5. 查看索引

(1)查询整张表的索引

show create table 表名\G;

在这里插入图片描述

(2)查询整张表的索引

show indexes from 表名;show index from 表名;

在这里插入图片描述
(3)查询整张表的索引

show keys from 表名;

6. 删除索引

索引是建⽴在表的字段上的,不同的表中可能会出现相同名称的索引,因此删除索引时需要指定表名

-- 格式
drop index 索引名 on 表名;
drop index index_test1 on student;

7. 使用初步总结

7.1 优点
(1)索引⼤⼤降低了数据库服务器在执⾏查询操作时扫描的数据,提⾼查询效率;
(2)索引可以避免服务器排序、将随机IO变成顺序IO;

7.2 缺点
(1)索引是根据数据表的列所创建的,当数据表中数据发⽣DML操作时,索引⻚需要更新;
(2)索引⽂件也会占⽤磁盘空间。

7.3 注意事项

(1)数据表中数据不多时,全表扫描可能更快,不要使⽤索引;
(2)数据量⼤但是DML操作很频繁时,不建议使⽤索引;
(3)不要在数据重复读⾼的列上创建索引(例如性别);
(4)创建索引之后,要注意查询SQL语句的编写,避免索引失效。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一个servlet的程序

文章目录 一.Hello World的程序1.创建项目2.引入依赖3.创建目录4.编写代码5.打包程序6.部署程序7.验证程序 二.简化部署方式1.下载插件2.配置smart Tomcat插件3.测试插件 三.常见的servelt问题出现 404出现 405出现 500出现 "空白页面"出现 "无法访问此网站&quo…

【数据结构】队列详解

本篇要分享的内容是队列的解析和增删查改的使用,以下为本篇目录 目录 1.队列的概念及结构 2.队列的结构 3.队列的初始化 4.队列空间释放 5.入队 6.出队 7.获取队头和队尾元素 获取对头 获取队尾 8.计算队列元素 9.判空 11.本篇所有代码展示 Queue.c Q…

一、尚医通手机登录

文章目录 一、登录需求1、登录效果2、登录需求 二、登录1,搭建service-user模块1.1 搭建service-user模块1.2 修改配置1.3 启动类1.4 配置网关 2、添加用户基础类2.1 添加model2.2 添加Mapper2.3 添加service接口及实现类2.4 添加controller 3、登录api接口3.1 添加…

FPGA——HLS入门-LED闪烁仿真

系列文章目录 文章目录 系列文章目录一、HLS介绍1、什么是HLS2、与VHDL/Verilog有什么关系?3、关键技术局限性 二、Vivado HLS - LED闪烁仿真1、项目配置2、C仿真3、联合仿真 三、总结 一、HLS介绍 1、什么是HLS HLS就是高综合(High level Synthesis)…

公网远程访问本地jupyter notebook服务 - 内网穿透

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 转载自cpolar的文章:公网远程访问Jupyter Notebook【Cpolar内网穿透】 前言 Jupyter Notebook&am…

最优化方法Python计算:一元函数搜索算法——牛顿法

设函数 f ( x ) f(x) f(x),在 [ a , b ] [a,b] [a,b]上二阶连续可微且有唯一的最小值点 x 0 x_0 x0​。由于 f ( x ) f(x) f(x)是 [ a , b ] [a,b] [a,b]上的单峰函数,故 f ′ ′ ( x ) > 0 f(x)>0 f′′(x)>0, x ∈ ( a , b ) x\in…

MyBatis快速入门

目录 一、什么是MyBatis 二、MyBatis的学习要领 三、搭建第一个MyBatis 3.1 创建数据库和表 3.2 添加MyBatis框架支持 3.2.1 老项目添加MyBatis 3.2.2 新项目去添加MyBatis 3.3 设置MyBatis配置信息 3.3.1 设置数据库连接的相关信息 3.3.2 设置MyBatis xml保存路径 和…

vue-cli4+vant+rem+sass+vuex+axios封装+webpack搭建前端项目

移动端项目模板 基于 vue-cli4.0 webpack 4 vant ui sass rem 适配方案axios 封装,构建手机端模板脚手架 启动项目 git clone https://github.com/teach-tian/h5-vue-cli4.gitcd h5-vue-cli4npm installnpm run serve✅ 配置多环境变量 package.json 里的 s…

SpringBoot【开发实用篇】---- 整合第三方技术(监控)

SpringBoot【开发实用篇】---- 整合第三方技术(监控) 1. 监控的意义2. 可视化监控平台3. 监控原理 在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐…

Linux基于Apache服务搭建简易镜像站

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux基于Apache服务搭建简易镜像站 安装Apache服务器 yum install -y httpd.x86_64 配置Apache服务器:编辑Apache配置文件/etc/httpd/conf/httpd.conf #S…

ospf的rip和ospf互通以及配置stub区域和totally stub

1. ospf与rip如何互通 我们需要在两台路由器上互相引入,如上图 AR5和AR6运行了rip,但AR5也运行了ospf要想路由器能够互相学习到路由,就需要在AR5上配置路由协议引入 什么是stub区域如何配置stub区域 Stub区域的功能:过滤4类LSA和5类LSA,对外产生缺省的…

Unity之使用Photon Server + PUN2 开发局域网多人游戏

一.前言 Photon Engine是一款跨平台的实时多人游戏引擎,它提供了可靠的基础设施和工具,使开发者能够轻松地构建和部署多人游戏。Photon Engine支持多种平台,包括PC、移动设备和Web,同时还提供了多种语言的SDK,如C++、C#、Java、JavaScript等,使得开发者可以使用自己熟悉…

宁德时代,冷暖自知口难言

作者 | 魏启扬 来源 | 洞见新研社 发布可以“上天”的凝聚态电池、落地能量密度160Wh/kg的钠离子电池、量产系统集成度全球最高的麒麟电池…… 宁德时代在上海车展前后密集发声,坚决捍卫着“宁王”的冠冕。 如果再结合不久前的2022年年报,全年307亿的…

条码控件Aspose Barcode,满足您条码需求的终极解决方案

Aspose.BarCode for .NET 是一个功能强大的API,可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能,以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API 支持流行文件格式处理&a…

如何在 Ubuntu 22.04 上安装 Python Pip?

Python Pip 是 Python 的包管理器,它允许您轻松地安装和管理 Python 包和库。在 Ubuntu 22.04 上安装 Python Pip 是非常简单的。 本文将详细介绍如何在 Ubuntu 22.04 上安装 Python Pip,并为您提供逐步指南。 步骤 1:更新软件包列表 在安装…

C嘎嘎~~[谈谈C++的一些优化]

C的一些优化 匿名对象引用引用作形参引用作返回值 编译器优化构造 拷贝构造 ⇒ 构造拷贝构造 拷贝构造 ⇒ 一个拷贝构造 匿名对象 通过以前C语言的学习, 我们知道了有一种 具有临时性的, 没有名字的变量 — — 匿名变量. 那么我们的对象应该也有这个特性 — — 匿名对象 匿名…

Kotlin 协程中的并发问题:我明明用 mutex 上锁了,为什么没有用?

前言 最近在接手的某项目中,主管给我发来了一个遗留以久的 BUG,让我看看排查一下,把它修复了。 项目的问题大概是在某项业务中,需要向数据库插入数据,而且需要保证同种类型的数据只被插入一次,但是现在却…

day15 - 使用图像金字塔进行图像拼接

在我们之前的学习过程中,使用的都是恒定大小的图像,但是在某些情况下,我们需要使用不同分辨率的(相同)图像。例如,当在图像中搜索某些东西(例如人脸)时,我们不确定对象将…

【高级语言程序设计(一)】第 10 章:文件

目录 一、文件概述 (1)文件定义 (2)文件命名 (3)文件分类 ① 按照文件的内容划分 ② 按照文件的组织形式划分 ③ 按照文件的存储形式划分 ④ 按照文件的存储介质划分 (4)文…

系统集成项目管理工程师 下午 真题 及考点(2019年上半年)

文章目录 一:第10章 项目质量管理,规划质量管理输出,质量成本法(一致性成本【预防、评价】 和 非一致性成本【内部失败、外部失败】),七种工具二:第8章 项目进度管理,总浮动时间&…