MySQL数据库索引

索引的定义

索引是一个排序的列表,包含索引字段的值和其对应的行记录的数据所在的物理地址

索引的作用

加快表的查询速度,还可以对字段排序

索引的副作用

会额外占用磁盘空间;更新包含索引的表会花费更多的时间,效率会更慢

索引的工作方式

没有索引的情况下,要根据条件查询某行数据时,需要先扫描全表,再定位某行数据的位置。

有了索引后,会先通过查询条件的字段值找到其索引对应的行记录的数据的物理地址,然后根据物理地址直接访问相应的行记录的数据,就像根据书目录的页码快速找到所需的内容。

创建索引的依据
  1. 表中的记录行数较多时,一般超过300行的表建议要有索引

  2. 建议在表中的主键字段、外键字段、多表连接使用的公共关键字段、唯一性较好的字段、不经常更新的字段、经常出现在 where,group by,order by 子语句的字段、 短小的字段上面创建索引

  3. 不建议在唯一性较差的字段、更新太频繁的字段、大文本字段上面创建索引

索引的类型

1. 普通索引

create index 索引名 on 表名 (字段);
#直接创建索引
alter table 表名 add index 索引名 (字段);
#修改表方式创建索引

2. 唯一索引

create unique index 索引名 on 表名 (字段);
#直接创建唯一索引
alter table 表名 add unique 索引名 (字段);
#修改表方式创建

3. 主键索引

create table 表名 ([...],primary key (字段));
#创建表的时候指定
alter table 表名 add primary key (字段);
#修改表方式创建

4. 主键索引

create index 索引名 on 表名 (字段1, 字段2, ....);
alter table 表名 add index 索引名 (字段1, 字段2, ....);例:
create unique index 索引名 on 表名 (字段1, 字段2, ....);
alter table 表名 add unique 索引名 (字段1, 字段2, ....);
select .... from 表名 where 字段1=XX and 字段2=XX ... ;
#用 and 做逻辑运算符多字段查询时,要创建组合索引且要满足最左原则
#用 or 做逻辑运算符多字段查询时,所有字段都要单独创建单列索引

5. 全文索引

create fulltext index 索引名 on 表名 (字段);
#直接创建索引
alter table 表名 add fulltext 索引名 (字段);
#修改表方式创建#支持模糊查询
select .... from 表名 where match(字段) against('单词');
查看索引
show index from 表名;
show keys from 表名;
删除索引
drop index 索引名 on 表名;
#直接删除索引
alter table 表名 drop primary key;
#修改表方式删除索引
alter table 表名 drop primary key;
#删除主键索引

例:
比如为某商场做一个会员卡的系统。这个系统有一个会员表,有下列字段:
会员编号        int
会员姓名        varchar(10)
会员身份证号码      int(18)
会员电话        int(11)
会员住址        varchar(50)
会员备注信息       text

mysql命令:
create table member (id int(10),name varchar(10),cardid varchar(10),phone int(11),address varchar(50),remark text);

alter table member add primary key (id);
#会员编号,作为主键,使用primary key

create index name_index on member (name);
#会员姓名,如果要建索引的话,那么就是普通的index

create unique index cardid_index on member(cardid);
#会员身份证号码,如果要建索引的话,那么可以选择unique(唯一的,不允许重复)

alter table member add fulltext remark_index (remark);
#会员备注信息,如果需要建索引的话,可以选择fulltext,全文搜索
#不过fulltext用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的index也可以

字段含义
字段含义
table表的名称
non_name如果索引不能包括重复词,则为0;如果可以,则为1
key_name索引的名称
seq_in_index索引中的列序号,从1开始
column_name列名称
collation列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)
cardinality索引中唯一值数目的估计值
sub_part如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL
pacted指示关键字如何被压缩。如果没有被压缩,则为NULL
null如果列含有NULL,则含有YES。如果没有,则该列含有NO
index_type用过的索引方法(btree, fulltext, hash,rtree)
comment备注

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

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

相关文章

PiflowX组件-WriteToUpsertKafka

WriteToUpsertKafka组件 组件说明 以upsert方式往Kafka topic中写数据。 计算引擎 flink 有界性 Streaming Upsert Mode 组件分组 kafka 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_h…

对比 PyTorch 和 TensorFlow:选择适合你的深度学习框架

目录 引言 深度学习在各行业中的应用 PyTorch 和 TensorFlow 简介 PyTorch:简介与设计理念 发展历史和背景 主要特点和设计理念 TensorFlow:简介与设计理念 发展历史和背景 主要特点和设计理念 PyTorch 和 TensorFlow 的重要性 Pytorch对比Te…

阿里开源大模型 Qwen-72B 私有化部署

近期大家都知道阿里推出了自己的开源的大模型千问72B,据说对于中文非常友好,在开源模型里面,可谓是名列前茅。 千问拥有有强大的基础语言模型,已经针对多达 3 万亿个 token 的多语言数据进行了稳定的预训练,覆盖领域、…

【Java】JUC并发编程(重量锁、轻量锁、偏向锁)

JUC并发编程 预备: 创建一个maven工程,导入lombok和logback的依赖。 1、基础概念 1、进程与线程 **进程:**程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU ,数…

Golang不可不知的7个并发概念

并发性支持是Golang最重要的原生特性之一,本文介绍了Golang中和并发性相关的7个概念。原文: Golang: 7 must-know concurrency related concepts 并发是Go编程语言的基本特性,意味着程序可以同时执行多个任务。Golang的并发独特而强大,其内置…

【Linux操作系统】探秘Linux奥秘:文件系统的管理与使用

🌈个人主页:Sarapines Programmer🔥 系列专栏:《操作系统实验室》🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS &…

【数据结构】栈和队列(队列的基本操作和基础知识)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​ 目录 前言 队列 队列的概念和结构 队列的…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树: 2.3数据结构中的二叉树: 2.4特殊的二叉树: 2.5 二叉树的存储结构 2.51 顺序存储: 2.5.2 链式存储&…

CSS2_基础学习

CSS2_基础学习 一、css基础知识二、css选择器2.0 选择器的优先级2.1 CSS基本选择器2.2 复合选择器2.2.1. 交集选择器2.2.2. 并集选择器2.2.3. 后代选择器(加空格)2.2.4. 子代选择器2.2.5. 兄弟选择器2.2.6. 属性选择器2.2.7. 伪类选择器2.2.8. 伪元素选择…

微信小程序发送模板消息-详解【有图】

前言 在发送模板消息之前我们要首先搞清楚微信小程序的逻辑是什么,这只是前端的一个demo实现,建议大家在后端处理,前端具体实现:如下图 1.获取小程序Id和密钥 我们注册完微信小程序后,可以在开发设置中看到以下内容&a…

navicat premium历史版本下载及更新navicat premium15 永久(使用)有效期

1、navicat premium介绍 Navicat Premium 是一套可创建多个连接的数据库开发工具,让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 GaussDB 、OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amaz…

MATLAB --- dlmread( )函数的用法

dlmread() 是 MATLAB 中用于读取以特定分隔符分隔的文本文件数据的函数 下面是 dlmread() 函数的用法: M dlmread(filename) M dlmread(filename, delimiter) M dlmread(filename, delimiter, R, C) M dlmread(filename, delimiter, range)参数说明&#xff1…

基于简化版python+VGG+MiniGoogLeNet的智能43类交通标志识别—深度学习算法应用(含全部python工程源码)+数据集+模型(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Anaconda环境 模块实现1. 数据预处理 相关其它博客工程源代码下载其它资料下载 前言 本项目专注于解决出国自驾游特定场景下的交通标志识别问题。借助Kaggle上的丰富交通标志数据集,我们采用了VGG和G…

推荐系统中 排序策略 CTR 动态加权平均法

CTR(Click-Through Rate)动态加权平均法是一种用于计算广告点击率的方法,其中每个点击率被赋予一个权重,这个权重可以随着时间、事件或其他因素而动态调整。这种方法旨在更灵活地反映广告点击率的变化,使得最近的数据更…

Mybatis 事务接口

当我们从数据源中得到一个可用的数据库连接之后,就可以开启一个数据库事务了,事务成功开启之后,我们才能修改数据库中的数据。 在修改完成之后,我们需要提交事务,完成整个事务内的全部修改操作,如果修改过…

JAVA:利用JUnit进行高效的单元测试

1、简述 在软件开发中,单元测试是确保代码质量和可维护性的关键步骤。JUnit作为Java领域最流行的单元测试框架之一,提供了简单而强大的测试工具,可以帮助开发者在项目开发过程中及时发现和修复代码中的问题。本文将介绍JUnit的基本用法以及一…

【每日一题】一周中的第几天

文章目录 Tag题目来源解题思路方法一:模拟 写在最后 Tag 【模拟】【数学】【2023-12-30】 题目来源 1185. 一周中的第几天 解题思路 方法一:模拟 思路 题目中的日期是在 1971 到 2100 年之间的有效日期,即 1971-01-01 到 2100-12-31 范围…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话&#xff0c…

易舟云财务软件使用教程【文章目录】

易舟云财务软件使用教程【文章目录】 1、财务软件导论2、易舟云财务软件3、财务软件原理4、账套5、会计凭证6、资金日记账7、发票8、员工工资9、固定资产10、期末处理(结转与结账)11、会计账簿12、财务报表13、财务软件设置 1、财务软件导论 财务软件导论 2、易舟云财务软件 …

Java循环高级(无限循环,break,continue,Random,逢七过,平方根,判断是否是质数,猜数字小游戏)

文章目录 1.无限循环概念:for格式:while格式:do...while格式:无限循环的注意事项: 2.条件控制语句break:continue: 3. Random使用步骤: 4. 逢七过5. 平方根6.判断是否为质数7. 猜数字小游戏 1.无限循环 概…