浅谈MySQL之索引

1.什么是索引

        索引是一种数据结构,用于提高数据库的查询性能。它类似于书籍的目录,通过预先排序和存储一定列(或多列)的值,使数据库引擎能够更快速地定位和访问特定行的数据。索引的作用是加速数据检索的速度,降低查询的成本。

        在关系型数据库中,索引的实现通常是通过B树(或B+树)等数据结构来完成。这样的结构使得数据库引擎能够在进行查询时快速地定位到满足条件的数据,而不必遍历整个表。

        索引可以基于单个列或多个列,并且可以包括不同的类型,如唯一索引、主键索引、全文索引等。不同类型的索引适用于不同的查询需求。在MySQL中,索引是一种优化数据库查询性能的重要机制。索引可以加快数据检索的速度,降低查询的成本。

2.索引类型

MySQL支持多种类型的索引,其中最常见的包括:

  • 主键索(Primary Key) 

        主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行。每个表只能有一个主键索引。主键索引可以加速数据检索,并确保表中的每行都有唯一标识。

  • 唯一索引(Unique Index):

        每个表只能有一个主键索引。主键索引可以加速数据检索,并确保表中的每行都有唯一标识。

  • 普通索引(NormalIndex)

        普通索引是最基本的索引类型,没有唯一性或主键限制,可以在一个表的多个列上创建普通索引。

  • 全文索引(Full-Text Index) 

        全文索引用于在文本数据上执行全文搜索,而不是简单的匹配。主要用于对文本字段进行高效的搜索操作。

3.创建索引

3.1建表时创建索引

CREATE TABLEmember (id INT UNSIGNED PRIMARY KEY,name VARCHAR(20),email VARCHAR(36) UNIQUE KEY,)
或者
CREATE TABLEmember (id,name,email,PRIMARY KEY (id),UNIQUE KEY (email),)

3.2使用Create Index创建索引

  • 添加普通索引

语法:create index 索引名 on 表名(字段)

CREATE INDEX  索引名 ON 表名(col1, col2, ..., )
  • 添加唯一索引
CREATE UNIQUE INDEX  索引名 ON 表名(col1, col2, ..., )

例如:创建一个名为idx_name的索引:

CREATE INDEX idx_name ON your_table(column_name);
  •  复合索引

 可以在多个列上创建索引,形成复合索引。复合索引可以提高某些查询的性能,但也需要注意避免创建过于庞大的复合索引。

CREATE INDEX idx_multiple_columns ON your_table(column1, column2);

3.3使用Alter table创建索引

添加主键索引

数据列不允许重复,不能为null,一张表只能有一个主键;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD Primary key (col);

添加唯一索引

索引列是唯一的,可以null;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD unique <索引名> (col1, col2, ...col3);

添加普通索引

添加普通索引, 索引值不唯一,可为null

ALTER TABLE 表名 ADD index <索引名> (col1, col2, ...,);

添加全文索引

只能在文本类型CHAR,VARCHAR, TEXT类型字段上创建全文索引;

ALTER TABLE 表名 ADD Fulltext <索引名> (col)

添加多列索引

多列是唯一的

ALTER TABLE 表名 ADD UNIQUE (col1, col2, ..., );

4.alter table与create index创建索引的区别

(1)使用create index时需要提供索引的名称,如果是alter方式会自动生成名字。

(2)create index一次只能创建一个索引,alter方式可以创建多个。

4.查看索引信息

可以使用SHOW INDEX语句查看表的索引信息。

SHOW INDEX FROM your_table;

6.删除索引

5.1删除普通索引

通常 使用DROP INDEX语句删除索引。例如,删除名为idx_name的索引:

DROP INDEX index_name ON table_name;

index_name 是要删除的索引的名称。

table_name 是包含要删除索引的表的名称。

5.2删除主键或唯一索引

如果要删除主键或唯一索引,可以使用以下语法:

ALTER TABLE table_name DROP PRIMARY KEY; -- 删除主键 
或 ALTER TABLE table_name DROP INDEX index_name; -- 删除唯一索引

5.3注意事项

(1)删除索引可能会影响数据库性能,因此在删除索引之前,确保了解索引的使用情况和对查询性能的影响。

(2)在执行删除索引的操作之前,最好先备份相关的数据或表,以防出现意外情况。

(3)删除主键索引时,要确保删除操作不会导致数据完整性问题,例如,删除主键索引之前要确保有其他合适的唯一标识。

6.索引的优缺点

6.1优点

(1)提高查询速度: 通过使用索引,数据库引擎可以更快速地定位和检索符合查询条件的数据,减少了数据访问的成本。

(2)加速排序和聚合操作: 索引对排序和聚合操作也有积极的影响,使这些操作更加高效。

6.2缺点

(1)占用存储空间: 索引需要额外的存储空间,因为它是一种额外的数据结构。

(2)影响写操作性能: 插入、更新和删除操作可能变得更慢,因为每次这些操作时,数据库引擎需要更新索引。

(3)维护成本: 随着数据的变化,索引需要进行维护。因此,过多或不必要的索引可能导致维护成本增加。

7.写在最后

        以上是MySQL中索引的基本介绍。在设计数据库时,正确使用索引是提高查询性能的关键因素之一。在设计数据库时,需要权衡索引的使用,根据实际的查询需求和数据操作特性来合理选择和创建索引,以达到优化数据库性能的目的。

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

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

相关文章

贯穿设计模式-责任链模式

样例代码 涉及到的项目样例代码均可以从https://github.com/WeiXiao-Hyy/Design-Patterns.git获取 需求 实时地&#xff0c;根据city&#xff0c;sex&#xff0c;product字段进行业务投放&#xff0c;比如&#xff1a;北京的男生&#xff1b;四川的电脑等等 → 责任链模式&…

基于SSM的《数据库系统原理》课程平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

2024--Django平台开发-Web框架和Django基础(二)

day02 Web框架和Django基础 今日概要&#xff1a; 网络底层引入&#xff0c;到底什么是web框架&#xff1f;常见web框架对比django快速上手&#xff08;创建网站&#xff09;常见操作&#xff1a;虚拟环境、django项目、多app应用、纯净版逐点剖析&#xff1a;路由、视图、模…

PySide6多线程处理yolov5目标检测

两种多线程处理方法&#xff1a; 1. QThreadPoolQRunnable方法 # -*- coding: utf-8 -*- """ Created on Wed Jul 6 10:05:38 2022author: wenqingzhougmail.com """import uuid import cv2 import sys from PySide6.QtCore import Qt, QSize…

C++ 初始化列表

文章目录 一、基本格式二、使用场景 一、基本格式 C提供了初始化列表语法&#xff0c;用来初始化属性。 基本格式: 构造函数(参数1&#xff0c;参数2&#xff0c;参数3...):属性1(值1)&#xff0c;属性2(值2)... {// 构造函数体 }例子 #include <iostream> using name…

Java Swing手搓童年坦克大战游戏(I)

前言 业余偶尔对游戏有些兴趣&#xff0c;不过这样的时代&#xff0c;硬件软件飞速进步&#xff0c;2D游戏画面都无比精美&#xff0c;之前的8bit像素游戏时代早就过去了&#xff0c;不过那时候有许多让人印象深刻的游戏比如魂斗罗、超级玛丽、坦克大战(Battle City)等等。 学…

MCS-51单片机的基本结构

目录 一.单片机的逻辑结构 1.单片机的基本结构 2.引脚 3.中断系统 4.时钟电路 5.时序 6.典型指令的取指、执行时序 7.80C51中定时器/计数器 二.单片机的复位 三.程序的执行方式 1.单步执行方式 2.低功耗操作方式 3.EPROM编程和校验方式 首先补充一个知识点&#x…

ASP.NET Core中实现个人资料上传图片功能

当用户需要在ASP.NET Core中实现修改个人资料的功能时&#xff0c;其中一个常见的需求就是允许上传个人头像图片。下面将详细介绍如何在ASP.NET Core中实现修改个人资料上传图片的功能。 步骤一&#xff1a;控制器中添加一个HttpPost方法 首先&#xff0c;我们在控制器中添加…

案例099:基于微信小程序的外卖小程序的研究与开发

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

竞赛保研 基于深度学习的人脸专注度检测计算系统 - opencv python cnn

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的人脸专注度…

UE5 给自己的数字人重定向Mixamo动画

1 、准备动画骨格文件&#xff0c;动画文件&#xff0c;下面是Mixamo动画素材下载网站Mixamo动画骨格文件下载网站https://www.mixamo.com/2、下载动画骨格文件&#xff0c;打Mixamo网站&#xff0c;选择Characters骨格菜单&#xff0c;在下面找到对应的骨格。如下图所示&#…

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏&#xff0c;例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) &#xff0c;QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…

Robot Operating System 2: Design, Architecture, and Uses In The Wild

Robot Operating System 2: Design, Architecture, and Uses In The Wild (机器人操作系统 2&#xff1a;设计、架构和实际应用) 摘要&#xff1a;随着机器人在广泛的商业用例中的部署&#xff0c;机器人革命的下一章正在顺利进行。即使在无数的应用程序和环境中&#xff0c;也…

2023年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n,分别表示序列的长度。(0 < n ≤…

用邮件及时获取变更的公网IP--------python爬虫+打包成exe文件

参考获取PC机公网IP并发送至邮箱 零、找一个发送邮件的邮箱 本文用QQ邮箱为发送邮箱&#xff0c;网易等邮箱一般也有这个功能&#xff0c;代码也是通用的。 第一步&#xff1a;在设置中找到账户&#xff0c;找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务&#xff0c;点击获…

HttpRunner的测试用例分层机制

测试用例分层介绍&#xff1a; 在接口自动化测试维护过程中&#xff0c;由于测试用例的增加和需求变更导致测试用例的调整&#xff0c;使自动化测试用例的维护非常麻烦&#xff0c;直接关系到自动化测试能否持续有效地在项目中开展。 概括来说&#xff0c;测试用例分层机制的核…

手搓没有softmax 的gpt

手搓没有softmax 的gpt 代码解析代码 代码 import pandas as pd from tqdm import tqdm import numpy as np import paddle# class FeedForward(paddle.nn.Layer):def __init__(self, hidden_dim):super(FeedForward, self).__init__()self.fc_one paddle.nn.Linear(hidden_…

C#-数组

数组 (array) 是一种包含若干变量的数据结构&#xff0c;这些变量都可以通过计算索引进行访问。数组中包含的变量&#xff08;又称数组的元素&#xff09;具有相同的类型&#xff0c;该类型称为数组的元素类型。 数组类型为引用类型&#xff0c;因此数组变量的声明只是为数组实…

python 使用hash 给超级多文件高速去重

python 使用hash 给超级多文件高速去重 代码解释代码 import os from glob import globfrom tqdm import tqdm import hashlib def gen_hash(text):# 创建一个SHA256哈希对象hash_object = hashlib.sha256()

C语言基础知识(6):UDP网络编程

UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下&#xff0c;虽然可以确保发送消息的大小&#xff0c;却不能保证消息一定会到达。因此&#xff0c;应用有时会根据自己的需要进行重发处理。 1.UDP协议的主要特点&#xff1a; &#xf…