Mysql索引、事务与存储引擎 (索引)

news2025/1/13 13:49:54

一、索引
1、索引的概念:
索引就是一种帮助系统能够更加快速的查找信息的数据结构。
2.索引的作用:
①数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要的原因。
②当表很大或查询涉及到多个表时,使用索引可以成千上万倍地提高查询速度。
③可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。
④通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
⑤可以加快表与表之间的连接。
⑥在使用分组和排序时,可大大减少分组和排序的时间。
⑦建立索引在搜索和恢复数据库中的数据时能显著提高性能。
3.索引的副作用:
①索引需要占用额外的磁盘空间。
对于 MyISAM 引擎而言,索引文件和数据文件是分离的,索引文件用于保存数据记录的地址。而 InnoDB 引擎的表数据文件本身就是索引文件。
②进行增删改数据时候要花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅在经常被搜索的列(以及表)上面创建索引即可。
4、创建索引的原则:
①表的主键、外键必须有索引。因为主键具有唯一性,外键关联的是主表的主键,查询时可以快速定位。
②记录数超过300行的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。
③经常与其他表进行连接的表,在连接字段上应该建立索引。
④唯一性太差的字段不适合建立索引。
⑤更新太频繁地字段不适合创建索引。
⑥经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。
⑦经常进行 GROUP BY、ORDER BY 的字段上应该建立索引;
⑧索引应该建在选择性高的字段上。
⑨索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
总结:mysql的优化 那些字段/场景适合创建索引 那些不适合
1.小字段
2.唯一性强的字段。
3.更新不频繁,但是查询比较高的字段。
4.表记录超过300+行
5.主键、外键、唯一键
5、索引的分类以及创建:
准备工作:
首先需要在数据库中创建一张表,进行接下来的索引操作:

create table user (id int(10),name varchar(15),cardid int(18),phone int(11),address varchar(60));
插入一些数据:
insert into user values(1,'zhangsan',111222556,12345678,'beijing');
insert into user values(2,'lisi',11155556,12627890,'shanghai');
insert into user values(3,'wangwu',11222526,126265543,'shanghai');
insert into user values(4,'xiaoma',66668888,126668888,'beijing');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一、普通索引
普通索引:最基本的索引类型,没有唯一性之类的限制。
总结:针对所有字段,没有特殊的需求和规则。
创建普通索引的方式
方式一:直接创建索引

CREATE INDEX 索引名 ON 表名 (字段名[(length)]);
#(列名(length)):length是可选项,下同。如果忽略 length 的值,则使用整个列的值作为索引。如果指定,使用列的前 length 个字符来创建索引,这样有利于减小索引文件的大小。在不损失精确性的情况下,长度越短越好。
#索引名建议以“_index”结尾。
create index 索引名 on 表名 (字段名(LEN));
查询:show create table 表名;
举例:对name创建普通索引
create index name_index on user (name);
查询:show create table user; 或者  show index from user;
desc user; #查看表结构

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

ALTER TABLE 表名 ADD INDEX 索引名 (字段名);
 举例:对id创建普通索引
alter table user add index id_index(id);
查询:show create table user;
查看表结构:desc user;

在这里插入图片描述

方式三:创建表的时候指定索引

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,...,UNIQUE 索引名 (字段名));
 举例:将name创建普通索引
create table usertable (id int(10),name varchar(10),cardid int(18),phone int(11),address varchar(30),index name_index(name));
查询:show create table usertable;
desc usertable; #查看表结构

在这里插入图片描述
二、唯一索引
①与普通索引类似,但区别是唯一索引列的每个值都唯一。唯一索引允许有空值(注意和主键不同)。
②如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。
总结:针对唯一字段,仅允许出现一次空值。
创建方式:
方式一:直接创建唯一索引:

CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
 举例:给cardid创建唯一索引
create unique index cardid_index on user(cardid);
查询:show create table user;
desc user; #查看表结构

在这里插入图片描述
方式二: 修改表方式创建唯一索引:

ALTER TABLE 表名 ADD UNIQUE 索引名 (字段名);
举例:给phone创建唯一索引
alter table user add unique phone_index(phone);
查询:show create table user;
desc user; #查看表结构

在这里插入图片描述
方式三: 创建表的时候指定唯一索引

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,...,UNIQUE 索引名 (字段名));
举例:创建表时给id创建唯一索引
create table nametable (id int(10),name varchar(10),cardid int(18),phone int(11),address varchar(30),unique id_index(id));
查询:show create table nametable;
desc user; #查看表结构

在这里插入图片描述
三、组合索引:
①可以是单列上创建的索引,也可以是在多列上创建的索引。
②需要满足最左原则,因为 select 语句的 where 条件是依次从左往右执行的,
③所以在使用 select 语句查询时 where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
总结:多列/多字段组合形式的索引 查询时候按照排序的顺序查找 否则无效
创建方法:
方式一:直接创建组合索引

CREATE index 索引名 ON 表名 (字段1, 字段2, ...);
select 查询时 where 语句中的条件字段 要与组合索引的字段排列顺序一致(最左原则)
select * from 表名 where 字段名1='...' AND 字段名2='...' AND 字段名3='...';
 
 举例:直接创建name,cardid,phone的组合索引
create index name_cardid_phone_index on nametale(name,cardid,phone);
查询:show create table user;
desc user; #查看表结构
查询是按顺序:select name cardid phone from 表名 (顺序不能乱,要按照组合顺序进行查询,否则将不生效)

在这里插入图片描述
方式二:修改表方式创建组合索引:

alter table 表名 add index 索引名 (字段1,字段2,字段3,...);  
举例:修改表的方式创建name,cardid,phone的组合索引
alter table nametale add index name_phone_cardid_index(name,phone,cardid);
查询:show create table user;
desc user; #查看表结构

方式三: 创建表的时候指定组合索引

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型,字段3 数据类型,INDEX 索引名 (字段1,字段2,字段3)); 
create table untable (id int(10),name varchar(10),cardid int(18),phone int(11),address varchar(30), index id_name_cardid_index(id,name,cardid));
查询:show create table untable;
desc untable; #查看表结构

在这里插入图片描述
四、 主键索引
是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。
总结:针对唯一字段,且不为空,同时一张表只允许包含一个主键索引。

创建表的时候指定:

CREATE TABLE 表名 (字段1 字段类型,字段2 字段类型,...,PRIMARY KEY (列名));
举例:给id创建主键索引
create table table1 (id int(10),name varchar(10),cardid int(18),phone int(11),address varchar(30),primary key(id));

在这里插入图片描述

五、全文索引:
①适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。在 MySQL5.6 版本以前
②FULLTEXT 索引仅可用于 MyISAM 引擎,在 5.6 版本之后 innodb 引擎也支持 FULLTEXT 索引。全文索引可以在 CHAR、③VARCHAR 或者 TEXT 类型的列上创建。
总结:以varchar char text blob clob 检索内部信息来做字段的索引。
创建方式:
方式一:直接创建索引:

CREATE FULLTEXT INDEX 索引名 ON 表名 (列名);
 举例:给remark直接创建全文索引
create fulltext index remark_index on teble2(remark);
查询:show create table untable;
desc untable; #查看表结构

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

alter table 表名 add fulltext 索引名(字段名);
举例:给remark修改表方式创建全文索引:
alter table table1 add fulltext remark_index(remark);
查询:show create table untable;
desc untable; #查看表结构

方式三:创建表的时候创建:

CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型...,FULLTEXT 索引名 (列名));
#数据类型可以为 CHAR、VARCHAR 或者 TEXT

查询:show create table untable;
desc untable; #查看表结构

六、查看索引的方法:

方式一:show create table 表名;
方式二:show index from 表名;
方式三:show keys from 表名;
#以上三种方式可以与\G联合使用
 
各字段的含义如下:
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:备注

七、删除索引的方法:
方法一:
直接删除索引:

drop index 索引名 on 表名;

在这里插入图片描述

方法二:修改表的方式删除索引:

ALTER TABLE 表名 DROP INDEX 索引名;

删除主键索引:

ALTER TABLE 表名 DROP PRIMARY KEY;

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

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

相关文章

Linux安装软件每次靠百度,这次花了些时间,终于算是搞明白了

Linux下安装命令虽然经常使用,但也仅仅是会使用,每次再用时依然的百度 。于是就花了些时间整体的梳理了一番,以便于更好的理解。 1.安装流程介绍 在Linux下安装软件,其实也是遵循着和Windows一样的安装流程。 首先,…

巨人互动|Facebook海外户Facebook游戏全球发布实用策略

Facebook是全球最大的社交媒体平台之一,拥有庞大的用户基数和广阔的市场。对于游戏开发商而言,利用Facebook进行全球发布是一项重要的策略。下面小编将介绍一些实用的策略帮助开发商在Facebook上进行游戏全球发布。 巨人互动|Facebook海外户&Faceboo…

淘宝API技术解析,实现按图搜索淘宝商品

淘宝提供了开放平台接口(API)来实现按图搜索淘宝商品的功能。您可以通过以下步骤来实现: 1. 获取开放平台的访问权限:首先,您需要在淘宝开放平台创建一个应用,获取访问淘宝API的权限。具体的申请步骤和要求…

1.6 服务器处理客户端请求

客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。 从图中我们可以看出,服务器程序处理来自客户端的查询请求大致需要经过三个部分,分别…

前端需要理解的 React 知识

1 框架通识 1.1 MVVM、MVC和MVP MVC、MVP 和 MVVM 是三种常见的软件架构设计模式。主要通过分离关注点的方式来组织代码结构,优化开发效率。 MVC将应用抽象为数据层(Model)、视图层(View)、逻辑层(contr…

解锁Selenium的力量:不仅仅是Web测试

Selenium简介 Selenium,作为Web应用测试的领军者,已经成为了无数开发者和测试人员的首选工具。它不仅仅是一个自动化测试工具,更是一个强大的Web应用交互框架。 Selenium的起源与发展 Selenium的历史可以追溯到2004年,由Jason Hu…

二叉树、红黑树、B树、B+树

二叉树 一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。 二叉树的特点: 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。二叉树的子树有左右之分&#xf…

【算法刷题之哈希表(2)】

目录 1.leetcode-454. 四数相加 II2.leetcode-383. 赎金信(1)暴力解法(2)哈希法 3.leetcode-205. 同构字符串(1)哈希法(2)直接对比查找 4.leetcode-128. 最长连续序列5.总结 1.leetc…

抖音小程序商城开发制作源码 含多套模板+部署搭建教程

分享一个抖音小程序商城的制作源码,含多套模板、模块化自由DIY功能和完整的搭建部署教程。程序支持除抖音小程序商城制作外,还支持一键同步微信、支付宝、百度、今日头条端小程序。 抖音小程序商城的基本架构包括前端页面和后端管理平台两部分。前端页面…

【FPGA】FPGA入门 —— 基本开发流程

FPGA入门 1. FPGA入门2. FPGA开发流程3. 二选一多路器 - 快速熟悉开发环境及流程 1. FPGA入门 快速上手verilog语法状态机,线性序列机FPGA常见的设计方法自己写代码,下载代码进行使用,使用厂家/第三方提供的IP核常见接口设计 等等。。 学习…

白介素对NK细胞功能的影响(IL-1β、IL-12、IL-15、IL-18、IL-21)

1、促进NK细胞扩增和活化:IL-2/21 Soiffer RJ等自1996年起即报道IL-2低剂量持续输注和间歇给药对转移癌患者的CD56NK细胞有明显扩增效果。大部分NK细胞表面具有IL-2中亲和性受体,IL-2诱导NK的杀伤活性约需18~24小时。此外,IL-2还…

Docker安装Jenkins实操记录

前置条件: 1、安装了docker 2、安装了java(没有安装情况下,可运行:yum install -y java-1.8.0-openjdk-devel.x86_64) 一、拉取镜像 1、docker pull jenkins/jenkins 2、mkdir -p /usr/local/jenkins 3、chmod 777 …

模型崩溃,ChatGPT变“笨”了?最新评估结果揭示真相原因

​ChatGPT性能是否变化? 人们可能会好奇,像ChatGPT这样的AI系统是否会因为太聪明而最终无法被人类所驾驭使用。但是,最近的一项研究表明,ChatGPT正在变得越来越糟糕。[1] OpenAI的ChatGPT帮助了无数人更高效地使用互联网。无论是…

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…

【AndroidStudio】屏蔽小米打印

使用小米手机调试时&#xff0c;会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue

ISO-16750-1,2,3,4,5_2023 道路车辆 — 电气和电子设备的环境条件和测试 ,标准汇总

目录 一、ISO 16750标准各Part部分当前状态&#xff1a; ISO 16750-2023 合集1-5包下载&#xff1a;https://download.csdn.net/download/std7879/88251235 二、ISO 16750标准各Part部分描述的内容&#xff1a; ISO 16750-1:2023Part 1: General概述 ISO 16750-2:2023 Part…

8路模拟信号采集FMC子卡模块推荐哪些?

FMC168是一款基于VITA57.4标准的2GSPS/2.6GSPS/3GSPS采样率14位分辨率Double FMC子卡模块&#xff0c;该模块可以实现8路14-bit、2GSPS/2.6GSPS/3GSPS采样率模拟信号采集。该板卡ADC器件采用ADI公司的AD9208芯片,该芯片与AD9689完全兼容&#xff0c;可以实现不同的采样率范围。…

微信小程序客服系统-两种形式:嵌入页面传递更多信息 与 自带组件形式

微信小程序对接有两种方式&#xff1a;webview组件嵌入页面&#xff0c;小程序客服组件对接消息 使用webview组件嵌入聊天页面形式。这种形式更加的灵活可控&#xff0c;可以传递更多的信息给到客服&#xff0c;例如可以把用户的手机号&#xff0c;所在页面的产品信息等带入进来…

Dubbo3之SerializingExecutor

前言 Dubbo3 提供了一个挺有意思的 Executor&#xff0c;用来将提交到线程池里的任务按顺序串行执行。 需求背景&#xff1a;你有一个线程池&#xff0c;但是你不想修改它&#xff0c;现在你的需求是要把提交上去的任务按顺序串行执行。 在这样一个需求背景下&#xff0c;Ser…

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL

摘要 本文主要介绍了IRNet论文的基本信息&#xff0c;比如标题、摘要、数据集、结果&结论&#xff0c;以及论文中提出的不匹配问题和词汇问题以及对应的解决方案&#xff0c;重点学习了中间表示SemQL。 引言 学习论文时&#xff0c;可以先粗略看看论文标题-摘要-数据集-结…