【MySQL数据库】MySQL索引

news2024/11/26 16:51:50

MySQL索引、事务与存储引擎

  • 一、索引
    • 1.1索引的概念
    • 1.2索引的作用
    • 1.3索引的工作原理
    • 1.4索引的副作用
    • 1.5索引的应用场景
  • 二、索引的创建与分类
    • 2.1普通索引,最基本的索引类型,没有唯一性之类的限制。
    • 2.2唯一索引
    • 2.3 主键索引
    • 2.4组合索引
    • 2.5全文索引
  • 三、删除索引,查看索引
    • 3.1删除索引
    • 3.2扩展explain命令

一、索引

1.1索引的概念

  • 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
  • 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。
  • 通俗点说:索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址

1.2索引的作用

  • ·设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
  • 当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
  • 可以降低数据库的TO成本并目索引还可以降低数据库的排序成本
  • 通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  • 可以加快表与表之间的连接
  • 在使用分组和排序时,可大大减少分组和排序的时间。
  • 建立索引在搜索和恢复数据库中的数据时能显苦提高性能

一句话概括:加快表的查询速度,还可以对字段排序

1.3索引的工作原理

  • 没有索引的情况下,要查询某行数据,需要先扫描全表来定位某行数据
  • 有索引后会通过查找条件的字段值找到其索引对应的行数据的物理地址,然后根据物理地址访问相应的数据

1.4索引的副作用

  • 索引会占据磁盘空间
  • 索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。

1.5索引的应用场景

  • 1)表中的记录行数较多时,一般超过300行的表建议要有索引
  • 2)建议在 表中的主键字段、外键字段、多表连接使用的字段、唯一性较好的字段,不经常更新的字段、经常出现在where、group by、order by 子语句的字段、小字段 创建索引
  • 3)不建议在 唯一性较差的字段、更新太频繁的字段、大文本字段上创建索引

二、索引的创建与分类

2.1普通索引,最基本的索引类型,没有唯一性之类的限制。

直接创建索引

CREATE INDEX索名 ON 表名 (列名[(length)1);
#(列名(length)): length是可选项,下同。如果忽略 enqth 的值,则使用整个列的值作为索引。如果指定,使用列的前 lenath个字符来创建索引,这样有利于减小索引文件的大小。在不损失精确性的情况下,长度越短越好。#索引名建议以"index"结尾

在这里插入图片描述
修改表的方式创建

ALTER TABLE 表名 ADD UNIOUE 索引名 (列名);

在这里插入图片描述
创建表的方式创建

CREATE TABLE 表名 ( 字段1 数据类型,字段2 数据类型[,...],INDEX 索引名(列名));

在这里插入图片描述

2.2唯一索引

  • 唯一索引:与普通索引类似,但区别是唯一索引列的每个值都难一,唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建。则列值的组合必须啡一。添加唯一键将自动创建唯一索引。
#直接创创建唯一索引
CREATE UNIOUE INDEX 索引名ON 表名(列名);
create unique index cardid index on member(cardid);
#修改表方式创建
ALTER TABLE 表名 ADD UNIOUE 索引名 (列名);
#创建表的时候指定
CREATE TABLE 表名(字段1 数据类,字段2 数据类型...],UNIOUE 索引名 (列名));

在这里插入图片描述
在这里插入图片描述

2.3 主键索引

  • 主键索引:是一种特殊的唯一索引,必须指定为"PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。
#创建表的时候指定
CREATE TABLE 表名 ([..l,PRIMARY KEY (列名));
#修改表方式创建
ALTER TABLE 表名 ADD PRIMARY KEY (列名);

在这里插入图片描述
在这里插入图片描述

2.4组合索引

组合索引:(单列索引与多列索引);可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为 select 语句的 where条件是依次从左往右执行的,所以在使用 select 语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

#直接创建索引
create index 索引名 on 表名 (列表1,列表2,列表3)
#修改表方式创建
alter table 表名 add index 索引名 (列表1,列表2,列表3)#创建表的时候指定
CREATE TABLE 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型,INDEX 索引名 列名1,列名2,列名3));
#用唯一键创建组合索引
create unique index 
索引名 on 表名 (列表1,列表2);
#修改的方式创建
alter table 表名 add unique 索引名 (列表1,列表2);
#查询
select* from 表名 where 列名1='...'AND 列名2=...  AND 列名3=...';

用 and 做条件逻辑运算符时,要创建组合索引且要满足最左原则
用 or 做条件逻辑运算符时,所有字段都要创建索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5全文索引

  • 全文索引:适合在进行糊查询的时候使用,可用于在一篇文章中检索文本信息。在 MSOL5.6 版本以前EULLTEXI索引仅可用于 MySAM引,在 5.6 版本之后 modb 引也支持 ELLTEXT 索。全文索可以在CHAR、VARCHAR或者 TEX类型的列上创建

注意:数据类型可以为CHAR、VARCHAR或者TEXT

#直接创建索引
CREATE FULLTEXT INDEX 索引名ON 表名 (列名);
#修改表方式创建
ALTER TABLE 表名ADD EULLTEXT 索名(列名);
alter table member add fulltext remark index (remark);
#创建表的时候指定索引
CREATE TABLE 表名 (字段1 数据类型[,...],EULLTEXT 索引名 (列名));

在这里插入图片描述

在这里插入图片描述
全文索引查询方式

模糊查询: select 列表 from 表名 where match(字段) against('查询内容');

在这里插入图片描述

三、删除索引,查看索引

3.1删除索引

# 修改表结构的方式删除
alter table 表名 drop index 索引名;
#直接删除
drop index 索引名 on 表名;
#删除主键索引
alter table 表名 drop primary key;

在这里插入图片描述
在这里插入图片描述
查看索引

show create table 表名;
show index from 表名;
show keys from 表名
字段含义
Table表的名称
Non_unique如果索引不能包括重复词,则为 0:如果可以,则为 1。
Key_name索引的名称
Seq_in_index索引中的列序号,从 1开始
Column_name列名称
Collation列以什么方式存储在索引中。在 MySQL 中,有值A’(升序)或 NULL (无分类)
Cardinality索引中唯一值数目的估计值
Sub_part如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL
Packed指示关键字如何被压缩。如果没有被压缩,则为 NULL
Null如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO
Index_type用过的索引方法 (BTREE,FULLTEXT,HASH,RTREE)
Comment备注

在这里插入图片描述
在这里插入图片描述

3.2扩展explain命令

  • 可以用于分析select查询语句,看key字段,确定是否使用了索引或索引使用是否正确
字段含义
possible_keys显示可能应用在这张表中的索引
key实际使用的索引。如果为 NULL,则没有使用索引。
key_len使用的索引的长度。在不损失精确性的情况下,长度越短越好,
ref显不索引的哪一列被使用了,如果可能,则是一个常数。
Extra关于MySQL 如何解析查询的额外信息。

在这里插入图片描述

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

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

相关文章

JMeter源码解析之结果收集器

目录 前言: 一、JMeter结果收集器概述 二、单机模式 三、分布式模式 四、总结 前言: JMeter是一款著名的开源性能测试工具,JMeter提供了多种结果收集器,以帮助用户对性能测试结果数据进行收集、整理和分析。 一、JMeter结果…

Mysql数据库初体验及管理

Mysql数据库初体验及管理 一、数据库相关概念1.数据库的组成2.数据库管理系统3.数据库系统 二、数据库的发展1.第一代数据库2.第二代数据库3.第三代数据库 三、主流的数据库介绍四、关系型数据库1、介绍2、实体3、关系4、属性非关系型数据库 五、Mysql数据库管理1、库和表2、常…

Excel 2021入门指南:详细解读常用功能

软件安装:办公神器office2021安装教程,让你快速上手_正经人_____的博客-CSDN博客 一、 新建工作表 打开Excel 2021后,可以看到左上角的“文件”选项,在弹出的菜单中选择“新建”选项,然后可以选择使用空白工作表或者…

工具-自动获取/校对XpathHelper/XpathHelperPlus/XPathHelperWizard插件轻松配置xpath规则

目录 一、xpath插件功能对比1.1、应用的范围1.2、不依赖插件,依赖谷歌开发者工具1.3、XpathHelper/XpathHelperPlus/XPathHelperWizard插件功能特点 二、安装XpathHelper插件以及用法2.1、安装XpathHelperPlus插件2.2、XpathHelperPlus插件使用方法 三、安装XPathHe…

自然语言处理: 第二章Word2Vec

一. 理论基础 维度很高(与语料库有关),计算复杂稀疏性,浪费计算效率,只有一个元素是1 其他都是0缺乏语义信息,无法衡量语义相似度无法处理未知单词 而在One-Hot的基础上,Word2Vec 是一种分布式表达字/词的方式&#x…

Java|注解之定义注解

Java语言使用interface语法来定义注解(Annotation),它的格式如下: public interface Report {int type() default 211;String level() default "211";String value() default "211"; } 注解的参数类似无参数…

华为OD机试真题 JavaScript 实现【比赛评分】【2023 B卷 100分】,附详细解题思路

一、题目描述 一个有N个选手参加比赛&#xff0c;选手编号为1~N&#xff08;3<N<100&#xff09;&#xff0c;有M&#xff08;3<M<10&#xff09;个评委对选手进行打分。打分规则为每个评委对选手打分&#xff0c;最高分10分&#xff0c;最低分1分。 请计算得分最…

Android 音视频开发核心知识点笔记整合

很多开发者都知道Android音视频开发这个概念&#xff0c;音视频开发不仅需要掌握图像、音频、视频的基础知识&#xff0c;并且还需要掌握如何对它们进行采集、渲染、处理、传输等一系列的开发和应用&#xff0c;因此&#xff0c;音视频开发是一门涉及到很多内容的领域。 随着5G…

开战在即!与全球伙伴一起打造你的数据应用,TiDB Future App Hackathon 2023 来啦!

2023 TiDB Future App Hackathon 来啦&#xff01;本届 Hackathon 的主题为&#xff1a;Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用、在全球范围内寻找你的队友、体验最新最 in 的 Serverless 技术&#xff0c;更有 总计 $3…

马原第一章复习1.

一.物质的存在方式 《德法年鉴》 完成从唯物到唯心 从革命主义等到共产主义的过度 为创立马克思理论提供了根本前提《德意志形态》 首次阐述了历史唯物主义的基本观点《共产党宣言》标志着马克思主义的公开问世 也是第一个无产阶级政党的党纲《资本论》阐述剩余价值学说 解释生…

【推荐】Oracle Live SQL——在线 Oracle SQL 测试工具

最近回答了几个 CSDN “学习”功能里“问答”区的一些专业相关问题&#xff0c;回答过程中采用严谨的方式&#xff0c;在 Oracle Live SQL 上进行验证测试。这个很好用的 Oracle APEX 应用我使用好几年了&#xff0c;虽然近年来已转行 MySQL 和国产数据库领域&#xff0c;但仍然…

链表与顺序表的区别以及扩展计算机硬件的存储体系

好久没有更新文章了&#xff0c;在忙学校的事情时我还是比较怀念大家一直以来对我的关注和鼓励&#xff0c;接下来我会继续更新数据结构相关的文章&#xff0c;也请大家多多支持&#xff0c;十分感谢。正文来了&#xff1a; 首先说明一点&#xff0c;我在举例和比较时所使用的是…

【2023,学点儿新Java-02】计算机硬件与软件 | CPU、内存、硬盘概览 | 科学使用键盘——“指法” | 软件——计算机的灵魂 | 人机交互方式

前情回顾&#xff1a; 【2023&#xff0c;学点儿新Java-01】从查看本机 jdk版本 开始 | Java基础全程脉络图、Java工程师全程技术路线、Java职业晋升路线图 我们见到的太阳 是八分钟前的太阳&#xff0c;见到的月亮 是一点三秒之前的月亮&#xff0c;见到一英里之外的建筑&…

【Docker 安装 Zipkin】—— 每天一点小知识

&#x1f4a7; D o c k e r 安装 Z i p k i n \color{#FF1493}{Docker 安装 Zipkin} Docker安装Zipkin&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》…

解决vue打包一次部署到不同的服务器的问题

1. 问题描述 在工作的时候&#xff0c;往往碰到同一套vue前端代码程序需要部署到很多的服务器上&#xff0c;每次更改完程序都需要打包部署到各个服务器上&#xff0c;因为每个服务器的访问地址和端口都不一样&#xff0c;如果用的若依自带的框架&#xff0c;需要每次都需要打…

Spring Security --- 自定义登录逻辑

目录 UserDetailsService详解 返回值 方法参数 异常 PasswordEncoder密码解析器详解 接口介绍 内置解析器介绍 BCryptPasswordEncoder简介 代码演示 自定义登录逻辑 编写配置类 自定义逻辑 UserDetailsService详解 当什么也没有配置的时候&#xff0c;账号和密码是…

Vue3:计算属性、监听器

computed 计算属性 计算属性是指 基于现有状态派生 (演变) 出新的状态&#xff0c;现有状态发生变化&#xff0c;派生状态重新计算。 computed 接收回调函数作为参数&#xff0c;基于回调函数中使用的响应式数据进行计算属性的创建&#xff0c;回调函数的返回值就是基于现有状态…

软件测试什么样的技术栈才能进入大厂

我们知道&#xff0c;能在一线大厂工作是大多数人的目标&#xff0c;不仅薪酬高&#xff0c;技能提升快&#xff0c;而且能得到公司影响力背书&#xff0c;将来就算跳槽也能带来光环加持。 最近疫情的影响&#xff0c;网上也爆出了一些裁员新闻&#xff0c;可以说这个疫情确实…

【深入浅出密码学】RSA

RSA密码体制 引言&#xff1a; RSA加密的本意并不是为了取代对称密码&#xff0c;而且它比诸如AES的密码要慢很多&#xff0c;因为RSA当中涉及许多数学计算&#xff0c;RSA通常和类似AES的对称密码一起使用&#xff0c;真正用来加密大量数据的是对称密码。而RSA主要保护对称密…

Linux0.11内核源码解析-block_dev.c

目录 block_dev.c 文件的作用 int block_write(int dev, long * pos, char * buf, int count) block_dev.c 文件的作用 block_dev.c 文件的作用 block_dev.c 文件就包含两个函数&#xff0c;分别是block_read和block_write函数&#xff0c;提供给read和write系统调用 块读写…