mysql笔记:7. 索引

文章目录

  • 索引含义和特点
  • 索引分类
    • 普通索引和唯一索引
    • 单列索引和组合索引
    • 全文索引
    • 空间索引
  • 索引设计原则
  • 创建索引
    • 直接创建索引
    • 在已经存在的表上创建索引
  • 删除索引

在关系数据库中,索引是一种可以加快数据检索速度的数据结构,主要用于提高数据库查询数据的性能。在MySQL中,一般在基本表上建立一个或多个索引,从而快速定位数据的存储位置。

索引含义和特点

索引是一个单独地存储在磁盘上的数据库结构,其包含着对数据表里面的所有记录的引用指针。
索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种存储引擎也没一定支持所有索引类型。
索引的优点主要有:

  • 通过创建唯一索引,可以保证数据表中的每一行数据的唯一性。
  • 可以大大加快数据的查询速度,这也是创建索引的最主要的原因。
  • 在实现数据的参考完整性方面,可以加速表和表之间的连接。
  • 在使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的时间。

索引也有缺点的,主要有:

  • 创建索引和维护索引要耗费时间 ,并且随着数据量的增加所耗费的时间也会增加
  • 索引需要占用磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增加、修改和删除的时候,索引也要动态维护,这样就降低了数据维护速度。

索引分类

普通索引和唯一索引

普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
唯一索引是指索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
主键索引是一种特殊的唯一索引,不允许有空值。

单列索引和组合索引

单列索引即一个索引只包含单个列。一个表可以有多个单列索引。
组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时要遵循最左前缀集合。

全文索引

全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文检索可以在CHAR、VARCHAR或TEXT类型的列上创建。MySQL中只有MyISAM存储引擎支持全文索引。

空间索引

空间索引是指对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是:GEOMETRY、POINT、LINESTRING和POLYGON。MySQL使用SPATIAL关键字进行扩展,使其能够用与创建正规索引类似的语法创建空间索引。相关列必须是非空的。空间索引只能在存储引擎为MyISAM的表中创建。

索引设计原则

索引缺少或设计不合理都会对数据库和应用程序造成障碍。设计时,有以下准则:

  • 索引并非越多越好。一个表中如果有大量索引,不仅占用磁盘空间,而且会影响INSERT、UPDATE、DELETE等性能,因为在表中的数据更改时,索引也要进行调整和更新
  • 避免对经常更新的表创建过多的索引,并且索引中的列应尽可能少。对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
  • 数据量小的表最好不要创建索引。因为数据较少,直接查询花费的时间可能比遍历索引的时间还要短。
  • 在条件表达式中经常用到的不同值较多的列上创建索引,在不同值少的列上不要创建索引。如人员信息表中的性能字段只有男女两个不同值,创建索引会严重降低更新速度。
  • 当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引需要能确保定义的列的数据完整性,以提高查询速度。
  • 在频繁进行排序或分组的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。

创建索引

直接创建索引

最简单的方式是创建表时直接创建索引,基本语法格式如下:

CREATE TABLE table_name [col_name data_type] 
[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name [length]) [ASC|DESC]

示例如下:

# 普通索引
index(publication_year)# 唯一索引
unique index uniqId(bookId)# 全文索引
fulltext index fullindex(bookname)# 单列索引
index idx(bookname(5))# 多列索引
index muxIndex(bookid, bookname, author)# 空间索引
spatial index index_na(bookname)

在已经存在的表上创建索引

基本语法:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX [index_name] ON table_name ( col_name [(length)] [ASC|DESC]);

也可以使用ALTER TABLE语句创建索引
基本语法:

ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX [index_name] ON table_name ( col_name [(length)] [ASC|DESC]);

删除索引

基本语法:

ALTER TABLE table_name DROP INDEX index_name;
或
DROP INDEX index_name ON table_name;

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

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

相关文章

人工智能指出数学教育问题

国内的数学教育长期以来都以其注重的计算能力而著称。从小学开始,学生们就接受严格的算术训练,九九乘法口诀表几乎成为了每个人的必修课。然而,尽管中国在数学方面的成绩屡获佳绩,但是锻炼的都是很容易被计算器或者计算机取代的能…

零基础学习JS--基础篇--使用类

JavaScript 是一个基于原型的语言——一个对象的行为取决于它自身的属性及其原型的属性。 在 JavaScript 中,类可以看作是已有的原型继承机制的一种抽象——所有语法都可以转换为原型继承。类本身也是不过是 JavaScript 里一种普通的值,它们有其自己的原…

JavaScript 技术100问?

JavaScript 是一种高级的、解释型的编程语言,通常用于为网页添加交互性和动态功能。作为 Web 开发中最重要的技术之一,JavaScript 在前端开发中扮演着重要角色。它可以直接嵌入到 HTML 中,并通过浏览器解释执行。JavaScript 的语法类似于 Jav…

2.Linux文件IO基础

Linux 文件 I/O(Input/Output)基础是 Linux 应用程序开发中的重要组成部分。在 Linux 系统中,文件 I/O 涉及到文件的读取和写入,以及文件描述符、系统调用等概念。以下是 Linux 文件 I/O 的基础知识: 1. 文件描述符 …

GEE Rgee——使用 eemont 和 geemap来进行Landsat 8数据的反演NDSI

简介 用 rgee 在 R 中使用 eemont 和 geemap来快速进行NDSI反演。 Landsat 8是一颗运行于太阳同步轨道上的遥感卫星,可以获取高分辨率的光学遥感数据,其中包括多光谱和热红外波段。NDSI(Normalized Difference Snow Index)是一种用于检测和分析雪被覆盖情况的指数。本文将…

算法刷题day25:多路归并

目录 引言概念一、鱼塘钓鱼二、技能升级三、序列 引言 关于这个多路并归蓝桥杯考的不是很多,如果要出的话,可能模型都会差不多,因为不会出太难的题,难题基本上都是贪心、DP之类的,所以好好刷题刷熟练就行了&#xff0…

ms office学习记录10:Excel㈣

自动填充时也可输入前几个值,选中单元格双击右下角黑色箭头进行填充 将填充样本行列粘贴至原列后要注意删除样本行列内容 排序与筛选 “数据”选项卡中的“排序”与“开始”选项卡中的“排序和筛选”实质相同 排序依据:数值内容和数值格式 “选项”…

最大的单入口空闲区域

最大的单入口空闲区域 问题描述输入输出代码实现 问题描述 找到最大的单入口空闲区域。 空闲区域是由连通的’O’组成的区域,位于边界的’O’可以是入口, 单入口空闲区域即有且只有一个位于边界的’O’作为入口的由连通的’O’组成的区域。 如果两个元素…

Docker使用之Docker Compose【入门篇】

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许用户通过一个单一的文件来定义多个容器,然后使用一个命令来启动、停止和管理这些容器。在本文中,我们将详细介绍如何使用Docker Compose进行多容器管理,并提供一个范例…

大数据开发(Spark面试真题-卷六)

大数据开发(Spark面试真题) 1、Spark HashPartitioner和RangePartitioner的实现?2、Spark DAGScheduler、TaskScheduler、SchedulerBackend实现原理?3、介绍下Sparkclient提交application后,接下来的流程?4…

查找C++中所有代码行数超过100的类成员函数

执行效果 python3 find_large_functions.py ./stage_test.cpp: StageTest::process has 106 lines. ./stage_test.cpp: StageTest::do_test_ has 172 lines.实现方法 在检测到函数开始的“可能”标志后(比如返回类型和作用域运算符::),开始…

Vue-router

router的使用(52) 5个基础步骤: 1.在终端执行yarn add vue-router3.6.5,安装router插件 yarn add vue-router3.6.5 2.在文件的main.js中引入router插件 import VueRouter from vue-router 3.在main.js中安装注册Vue.use(Vue…

力扣:链表篇章

1、链表 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。 2、链表的类…

Python高级二

一、异常 1、定义 异常是在程序执行过程中出现的错误或意外情况。当程序遇到异常时,它会中断当前的执行流程,并尝试找到相应的异常处理机制来解决问题。 2、常见异常类型 SyntaxError:语法错误,通常是代码书写不符合Python语法规则…

【前端】移动端布局

目录 1.移动端特点 分辨率 二倍图 2.百分比布局 3.flex布局 3.1flex布局模型 3.2主轴对齐方式 3.3 侧轴对齐方式 3.4flex属性 1.移动端特点 PC端网页和移动端网页的不同 PC端网页:屏幕大,网页固定版心 jd.com移动端网页:屏幕小 没…

实战案例——Kafka集群部署

1. 规划节点 IP主机名节点192.168.100.10zookeeper1集群节点192.168.100.20zookeeper2集群节点192.168.100.30zookeeper集群节点 2. 基础准备 使用ZooKeeper集群搭建的3个节点来构建Kafka集群,因为Kafka服务依赖于ZooKeeper服务, 所以不再多创建云主机…

vue前端获取本地IP地址

新建js文件 getIpAddress.js //获取本机的IP地址 function getNetworkIp() {let ip localhost;try {const network Os.networkInterfaces();//获取本机的网路for (const iter in network) {const faces network[iter];for (const interface of faces) {if (interface.fami…

接口自动化测试的三个阶段

根本目标 测试环境中,保证新增接口功能正确性,原有接口的回归(保证原有接口不被修改“坏”); 生产环境中,保证接口层面服务可用,功能的正确性(保证服务挂掉时,及时发现…

pytorch入门

相比起keras和tensorflow,个人感觉pytorch更好一些 相比起程序语言本身,个人感觉,记住解决问题的步骤和方法更重要 import torch ttorch.tensor(1) t.size() t1torch.rand((3,4)) torch.Tensor? torch.empty((3,3)) devicetorch.device(cuda if torch.cuda.is_available() els…

Python爬网页,不确定网页的编码,不需要用第三方库

Python爬网页,不确定网页的编码,不需要用第三方库,自己写个判断,乱拳打死老师傅 detect试了,不好用 apparent_encoding试了,不好用 encoding试了,不好用 headers里get试了,不好用…