MySQL数据库-索引的介绍和使用

目录

    • MySQL数据库-索引
      • 1.索引介绍
      • 2.索引分类
      • 3.创建索引
        • 3.1 唯一索引
        • 3.2 普通索引
        • 3.3 组合索引
        • 3.4 全文索引
      • 4.索引使用
      • 5.查看索引
      • 6.删除索引
      • 7.索引总结
        • 7.1 优点
        • 7.2 缺点
        • 7.3 索引使用注意事项

MySQL数据库-索引

数据库是用来存储数据,在互联网应用中,数据库存储的数据可能会很多(大数据),数据表中数据的查询速度会随着数据量的增长而逐渐变慢,从而导致相应用户请求的速度变慢,造成用户体验差。为了提高数据的查询效率,我们需要在数据库中用到索引。

数据准备

-- 创建数据表(准备存储500万数据)
CREATE TABLE tb_testindex(fid INT PRIMARY KEY,	-- 主键sid INT UNIQUE,			-- 唯一键tid	int,				-- 普通字段name VARCHAR(20),remark VARCHAR(20)
);
-- 数据准备:创建存储过程,向tb_testindex表插入500万条数据
CREATE PROCEDURE proc_readydata()
BEGINDECLARE i INT DEFAULT 1;WHILE i < 5000000 DOINSERT INTO tb_testindex(fid,sid,tid,name,remark) VALUES(i,i,i,'test_name','test_remark');SET i = i+1;END WHILE;
END;
-- 调用存储过程,准备五百万条数据
CALL proc_readydata();
-- 查询数据
SELECT COUNT(1) FROM tb_testindex;

1.索引介绍

索引:用来提高数据表中数据的查询效率。

索引,就是将数据表中的某一列/某几列的值取出来,构造成便于查找的结构进行存储,生成数据表的目录,当进行数据查找的时候,则先在目录中进行查找,得到对应数据的地址,然后再根据地址到数据表中快速的获取数据记录,避免全表扫描。

2.索引分类

MySQL索引,根据创建的列不同,可以分为:

  • 主键索引:在数据表的主键上创建的索引,这个字段必须被primary key修饰,每张表只能有一个主键
  • 唯一索引:在数据表的唯一键上创建的索引,必须被unique修饰,此列的所有值只能出现一次,可以为NULL
  • 普通索引:在普通字段上创建的索引,没有唯一性限制
  • 组合索引:两个及以上的字段联合起来创建的索引

说明:

  1. 在创建数据表时,将字段声明为主键,会自动在主键字段上创建索引–主键索引
  2. 在创建数据表时,将字段声明为唯一键,会自动创建主键–唯一索引

3.创建索引

3.1 唯一索引
-- 创建唯一索引:创建唯一索引的列可以为空,但不能重复
CREATE UNIQUE INDEX index_tid ON tb_textindex(tid);
3.2 普通索引
-- 创建普通索引:不要求创建索引的列必须不能重复
CREATE INDEX index_tid ON tb_textindex(name);
3.3 组合索引
-- 创建组合索引:在多个字段上创建索引
CREATE INDEX index_tid ON tb_textindex(tid,name);
3.4 全文索引

全文索引,是MySQL5.6版本以后新增的索引:通过此索引,可以进行全文检索操作,因为Mysql的全文检索不支持中文,因此全文索引不被开发者关注,在应用开发中,通常是通过全文搜索,搜索引擎如ES(数据库中间件)实现全文检索。

create fulltext index <index_name> on 表名(字段名);

4.索引使用

索引创建完成以后不需要调用,当根据创建索引的类进行数据查询的时候,会自动使用索引。

组合索引也需要根据创建索引的所有字段进行查询时触发。

  • 在命令行窗口中,可以查询语句的查询规划:
explain select * from tb_testindex where tid = 250000\G;

5.查看索引

-- 命令行
SHOW CREATE TABLE tb_testindex;
-- 查询索引
show index from tb_testindex;
-- 查询索引
show keys from tb_testindex;

6.删除索引

-- 删除索引
-- 索引是建立在字段上的,不同表中可能出现相同名称的索引,所以删除索引时需要指定表名
drop index index_tid on tb_testindex;

7.索引总结

7.1 优点
  • 索引提高查询效率
  • 索引可以避免服务器排序,将随机的IO变成顺序IO
7.2 缺点
  • 索引是根据数据表列的值创建,当数据表中数据发生DML操作时,会重新生成索引文件
  • 索引文件也会占用磁盘空间
7.3 索引使用注意事项
  • 如果数据表中数据不多时,不建议使用索引,全表扫描可能会更快
  • 数据量大,但是DML操作频繁,不建议使用索引
  • 不要在数据重复度高的列上创建索引(性别)
  • 创建索引之后,要注意查询SQL语句的编写,避免索引失效

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

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

相关文章

操作系统大会2024 | 麒麟信安根植openEuler社区,持续技术创新 共拓新应用 探索新机遇

[中国&#xff0c;北京&#xff0c;2024年11月15日] 以“以智能&#xff0c;致世界”为主题的操作系统大会2024在北京中关村国际创新中心召开&#xff0c;本次大会由openEuler社区和全球计算联盟主办&#xff0c;旨在汇聚全球产业界力量&#xff0c;推动基础软件根技术持续创新…

Wallpaper壁纸制作学习记录03

添加用户属性 Wallpaper Engine 允许用户在用户属性的帮助下进一步自定义您的壁纸。用户属性允许您为用户提供进一步调整和自定义壁纸各个方面的选项&#xff0c;包括完全隐藏壁纸中的对象。 创建可见性属性 每个元素在右上角都有一个 visibility 属性&#xff08;由眼睛图标…

杰理-gpadc

gpadc API是系统提供的用于adc采集的接口 void adc_init(); //adc功能初始化&#xff0c;一般在板级配置.c文件已经默认调用&#xff0c;用户无需再重复调用。 示例&#xff1a; static void WANG_printf(void *_arg) {//adc_init(); //板级配置中默认会调用&#xff0c;实际…

如何使用Jmeter做性能测试?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天我们来说说jmeter如何进行性能测试&#xff0c;我们都知道jmeter工具除了可以进行接口功能测试外&#xff0c;还可以进行性能测试。当项目趋于稳定&#xf…

【CSP CCF记录】201903-1第16次认证 小中大

题目 样例1输入 3 -1 2 4 样例1输出 4 2 -1 样例1解释 4 为最大值&#xff0c;2 为中位数&#xff0c;−1 为最小值。 样例2输入 4 -2 -1 3 4 样例2输出 4 1 -2 样例2解释 4 为最大值&#xff0c;(−13)21为中位数&#xff0c;−2为最小值。 思路 本题两个注意点&#xff0…

windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...

开发环境&#xff1a;windows10 qt5.14&#xff0c; 编译器msvc2017x64&#xff0c;CMake3.30&#xff1b; 现象&#xff1a; CMakeList文件里&#xff0c;如有find_package(Qt5 COMPONENTS Widgets REQUIRED) target_link_libraries(dis_lib PRIVATE Qt5::Widgets) 用CMak…

自由学习记录(23)

Lua的学习 table.concat(tb,";") 如果表里带表&#xff0c;则不能拼接&#xff0c;表里带nil也不能&#xff0c;都会报错 true和false也不可以&#xff0c;数字和字符串可以 if要和一个end配对&#xff0c;所以 if a>b then return true end end 两个end …

JavaWeb-表格标签-06

表格标签 table code: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格标签</title><…

【Stable Diffusion】 超大尺寸绘制、分区控制,详解Tiled Diffusion VAE插件功能

今天&#xff0c;我们将向您介绍一款令人兴奋的AI工具——Tiled Diffusion & VAE插件。这是一款基于Stable Diffusion技术的创新应用&#xff0c;旨在为您提供超大尺寸绘制和分区控制的便捷体验。无论您是AI绘画的新手还是专业人士&#xff0c;这个工具都能为您带来极大的便…

【大数据分析机器学习】分布式机器学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

染色质重塑与心衰中的细胞间通讯机制:解读一篇Nature力作

染色质重塑与心衰中的细胞间通讯机制&#xff1a;解读一篇Nature力作 一、文献的主要行文思路与观点 在这篇发表在 Nature 的文章中&#xff0c;作者聚焦于心脏衰竭中的慢性炎症与纤维化问题&#xff0c;试图揭示免疫细胞与成纤维细胞之间的通讯机制。研究围绕以下几个核心问题…

WordPress添加类似说说、微博的时间轴微语页面

这个版本的WordPress可以直接使用&#xff0c;CSS样式可以完美兼容。效果如图 使用方法&#xff1a; 一、后台配置 新建微语功能 将下面的代码复制粘贴到主题的functions.php函数文件中&#xff0c;为WordPress添加微语功能。添加完成后&#xff0c;可以在WordPress后台菜单…

解决IDEA报包不存在,但实际存在的问题

前言 最近在把一个亿老项目交割给同事&#xff0c;同事在导入项目运行时遇到IDEA报包不存在&#xff0c;但实际存在的问题&#xff0c;最终通过以下方式解决 现象 在IDEA里启动运行项目&#xff0c;报某个类有问题&#xff0c;引入的包不存在。 点击这个引入的包&#xff0c;可…

云原生之k8s服务管理

文章目录 服务管理Service服务原理ClusterIP服务 对外发布应用服务类型NodePort服务Ingress安装配置Ingress规则 Dashboard概述 认证和授权ServiceAccount用户概述创建ServiceAccount 权限管理角色与授权 服务管理 Service 服务原理 容器化带来的问题 自动调度&#xff1a;…

RocketMQ: 集群部署注意事项

概述 RocketMQ 是一款分布式、队列模型的消息中间件&#xff0c;具有以下特点&#xff1a; 能够保证严格的消息顺序提供丰富的消息拉取模式高效的订阅者水平扩展能力实时的消息订阅机制亿级消息堆积能力 选用理由&#xff1a; 强调集群无单点&#xff0c;可扩展&#xff0c;任…

【Unity How】Unity中如何实现物体的匀速往返移动

直接上代码 using UnityEngine;public class CubeBouncePingPong : MonoBehaviour {[Header("移动参数")][Tooltip("移动速度")]public float moveSpeed 2f; // 控制移动的速度[Tooltip("最大移动距离")]public float maxDistance 5f; // 最大…

ECharts柱状图-带圆角的堆积柱状图,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

element-plus的组件数据配置化封装 - table

目录 一、封装的table、table-column组件以及相关ts类型的定义 1、ATable组件的封装 - index.ts 2、ATableColumn组件的封装 - ATableColumn.ts 3、ATable、ATableColumn类型 - interface.ts 二、ATable、ATableColumn组件的使用 三、相关属性、方法的使用以及相关说明 1. C…

《数字图像处理基础》学习06-图像几何变换之最邻近插值法缩小图像

目录 一&#xff0c;概念 二&#xff0c;题目 三&#xff0c;matlab实现 对图像进行几何变换时&#xff0c;都是对数字图像进行处理。由于在matlab中使用imread函数读取的图像通常已经是数字图像&#xff0c;因此不需要进行额外的采样和量化等操作&#xff0c;就可以将图像…

TabNet 模型示例

代码功能 加载数据&#xff1a;从 UCI Adult Census 数据集中读取样本&#xff0c;进行清洗和编码。 特征处理&#xff1a;对分类特征进行标签编码&#xff0c;对数值特征进行标准化。 模型训练&#xff1a;使用 TabNet 模型对数据进行分类训练&#xff0c;采用早停机制提高效…