*MYSQL--索引*

一:介绍

        在MYSQL当中,索引的使用类似于书当中目录的作用,索引的使用能够让查询更加的迅速,比方说搜索mysql这个单词的时候,可以先从首字母为m开头的字母进行查找,这样就大大减少了搜索的时间,而不是从头到尾进行搜索,提高查询的速度

二:类型

        主要分为两大类,一种是根据底层的结构进行区分的(HASH索引,和B-TREE索引),另外一种是根据功能进行区分的;

        1.按照底层数据结构区分

        1>HASH索引:

        HASH索引实际上是根据哈希表的一种索引结构,通过在刚开始的时候,将索引列的值通过哈希算法(f())的方式,将其转化为哈希值.之后如果需要查找,再通过这个哈希值进行查找即可

        2>BTREE索引:

        一种树形结构的索引,从上(树根)往下(分支)不断缩小范围进行相应的查找

        2.按照功能进行区分

        1>单列索引:

                ①普通索引
                ②唯一索引
                ③主键索引

        2>组合索引

        3>全文索引

        4>空间索引

三:依据功能区分讲解:

        1.单列索引(仅仅只包含一个列,但是一个表当中可以有多个的单列索引):

        1>普通索引:

        Ⅰ介绍.

        MYSQL当中最基本的索引类型,无限制,允许在定义索引的列种加入空值以及重复值,仅仅是为了加快查询速度

        Ⅱ 操作.
	添加方式一:直接在创建表的时候添加索引
	create table emp1(
	id int,
	name VARCHAR(20),
	salary int,
	INDEX index_id(id)  
	);
	
	添加方式二:创建表之后进行直接添加
	create index indexname on tablename(columnname);
	create index index_salary on emp1(salary);
	
	添加方式三:通过修改表结构进行添加索引   -- 推荐
	alter table tablename add index indexname(columnname);
	alter table emp1 add index index_name(name);
	
	
	
	删除索引操作:
	一:drop index 索引名 on 表名
	二:alter table 表明 drop index 索引名

        2>唯一索引:

        Ⅰ 介绍:

        唯一索引跟普通索引相似,仅仅只有在本索引列上,数值必须是不同的,也可以有空值,但是如果是组合索引,列值的组合必须是唯一的

        Ⅱ 操作:
-- 单列索引
	添加方式一:
		create table emp1(
	id int,
	name VARCHAR(20),
	salary int,
	unique index_id(id)  
	);
	
		添加方式二:创建表之后进行直接添加
	create unique index indexname on tablename(columnname);
	create unique index index_salary on emp1(salary);
	
	添加方式三:通过修改表结构进行添加索引   -- 推荐
	alter table tablename add unique index indexname(columnname);
	alter table emp1 add unique index index_name(name);
	
	
	删除方式:
	一:drop index 索引名 on 表名
	二:alter table 表明 drop index 索引名
	
	alter table emp1 drop index index_salary;	
	alter table emp1 drop index index_id;	

        3>主键索引 :

        Ⅰ 介绍:

        主键索引,顾名思义,在创建表的时候,针对某一个列添加的主键之后,系统会自动对其添加主键索引(PRIMARY KEY) 主键索引不允许出现重复值以及NULL值

        2.组合索引:

                1>介绍:

                组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是复合普通索引,还是复合唯一索引

                2>操作:

组合索引:
	组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是普通索引,还是唯一索引
	
	语法:复合普通索引
	create index indexname on tablename(name1,name2....);
	
	create index index_id_name on emp1(id,name);
	
	语法:创建唯一索引
	create unique index indexname on tablename(name1,name2);
	
	create unique index index_id_name on emp1(id,name);
	
	索引的删除:
	alter table tablename drop index indexname;

                3>TIPS:

                1.需要注意的是,如果使用复合唯一索引,那么仅仅当设置的值全部都重复出现,是一模一样的,才会出错误,其他情况下,只有一个索引列不一样也是正确的;

                2.同时,对于复合索引设置的时候,也要注意设置的先后顺序,对于查询也是有一定影响的

	select * from emp1 where name = '张三';
	
	select * from emp1 where id = 1001;
	
	select * from emp1 where id=1001 and name='张三';
	
	select * from emp1 where name ='张三' and id =1001;

*前提,设置的复合唯一索引(id,name)

对于1进行查询的时候,不会使用复合唯一索引查询,因为没有提供设置的第一个唯一索引---id
而对于2,3都能够使用设置的复合唯一索引进行快速查询

即便是对于4,因为MYSQL系统会自动对其进行一定的优化,因此我们可以理解为3,4两个方式在mysql当中的作用是一样的

        3.全文索引

          1.介绍

            1.关键词:fulltext

            2.跟之前所学习的关键字like很像,全文索引主要是用来寻找文本当中的关键字,而不是直接跟索引当中的值进行比较,更像是一个搜索引擎,是以相似度为基本的查询,而不是简单的where语句的参数匹配查询
            3.但是跟like查询不一样的是,like的查询适用于对于数据量比较小的,而全文索引更加适用于大量级别的文本查询,查询速度相比于like的文本查询快了几个数量级!但是全文索引的查询可能会存在一些的精度问题

           2.操作:

创建全文索引的方法
	一:alter table tablename add fulltext fulltextname(var1,var2....);
	示例:对于表test添加的content添加全文索引
	alter table test add fulltext full_content(content);
	
	二:
	create fulltext index indexname on tablename(var1...);

使用全文索引
	关键字:match(var1) against(查询内容);
	
	示例:
	查询表test当中所有包含yo的内容,使用全文查询
	select * from test match(content) against('yo');  -- 查询不到,因为查询的最小搜索长度是3
	select * from test match(content) against('you'); -- 可以查询到,满足最小的查询长度

                3.TIPS:

                如果想要通过全文索引查询,必须要注意的是全文索引的两个量(最小搜索长度以及最大搜索长度) 大于,或者是小于这个范围的搜索内容都无法搜索到!
        

		可以使用
		show variables like '%ft%';  查看相应的数值大小

         4:空间索引:

        1.介绍:

        1>MYSQL仅仅在5.7之后才支持空间索引
        2>空间索引针对的是空间数据类型的字段建立的索引,MYSQL中的空间数据类型主要有4种,geometry,point,linestring,polygon
        3>并且在创建空间索引的时候,这个索引列必须是not null 类型的 

        2.操作:

geometry  含义:空间数据  说明:任何一种空间类型
	point  含义:点  说明:坐标值
	lineString  含义:线  说明:有一系列点连接而成的
	polygon  含义:多边形  说明:由多条线组成
	
	操作:
	create table spa_0(
	id int primary key auto_increment,  -- 'id'
	name VARCHAR(20), -- 门店名称
	point_1 geometry not null,  	-- 经纬度表示 
spatial key sap_index(point_1)
	);
	

                                                                OVER!感谢观看!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《Python 语音转换简易速速上手小册》第10章 未来趋势和发展方向(2024 最新版)

文章目录 10.1 语音技术的未来展望10.1.1 基础知识10.1.2 主要案例:语音驱动的虚拟助理案例介绍案例 Demo案例分析10.1.3 扩展案例 1:情感敏感的客服机器人案例介绍案例 Demo案例分析10.1.4 扩展案例 2:多模态智能会议系统案例介绍案例 Demo

个人博客系统测试

文章目录 一、项目介绍二、测试1. 功能测试2. 自动化测试(1)添加相关依赖(2)新建包并在报下创建测试类(3)亮点及难点 一、项目介绍 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来…

cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决

日常项目开发中。需要对qt5升级到qt6 做cmake兼容配置,在编译中发现,有c 编译环境 报错 2>C:\Qt\6.5.3\msvc2019_64\include\QtCore/qcompilerdetection.h(1226,1): fatal error C1189: #error: "Qt requires a C17 compiler, and a suitable …

目标检测卷王YOLO卷出新高度:YOLOv9问世

论文摘要:如今的深度学习方法重点关注如何设计最合适的目标函数,使得模型的预测结果能够最接近真实情况。 同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。 现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。 本文将深…

【JAVA】Tomcat的安装

目录 官网链接 下载安装程序 解压 启动Tomcat 问题 其他文件介绍 官网链接 Apache Tomcat - Welcome!https://tomcat.apache.org/ 下载安装程序 进入官网后,点击如下tomcat 8: 进入tomcat 8后选择zip文件下载 解压 Tomcat是一个基于java实现的“绿色软件…

golang tun设备创建并监听

golang tun设备创建并监听 linux tun设备文件地址为/dev/net/tun.直接打开即可(关闭文件描述符创建的tun虚拟接口自动注销) fd,err:syscall.Open("/dev/net/tun",syscall.O_RDWR,0640)//关闭 syscall.Close(fd)初始化 配置ip地址启动虚拟网卡 ip addr add xxx.xx…

2024-02-21 作业

作业要求: 复习课上内容 //已完成结构体字节对齐,64位没做完的做完,32位重新都做一遍,课上指定2字节对齐的做一遍,自己验证 //已完成两种验证大小端对齐的代码写一遍复习指针内容 //已完成完善顺序表已写出的…

使用HiveMQ实现Android MQTT

MQTT官网:https://mqtt.org/ 百度Android MQTT,或者B站上搜索,发现大多使用https://github.com/eclipse/paho.mqtt.android,这是Eclipse的一个Android MQTT客户端实现库,但是我发现这个库在运行到高版本的手机上时报错…

Oracle迁移到mysql-表结构的坑

1.mysql中id自增字段必须是整数类型 id BIGINT AUTO_INCREMENT not null, 2.VARCHAR2改为VARCHAR 3.NUMBER(16)改为decimal(16,0) 4.date改为datetime 5.mysql范围分区必须int格式,不能list类型 ERROR 1697 (HY000): VALUES value for partition …

【leetcode热题】填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到…

Linux线程同步(2)死锁与互斥锁

死锁(Deadlock)是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了…

【Linux进阶之路】Socket —— “UDP“ “TCP“

文章目录 一、再识网络1. 端口号2. 网络字节序列3.TCP 与 UDP 二、套接字1.sockaddr结构2.UDP1.server端1.1 构造函数1.2 Init1.3 Run 2.客户端1.Linux2.Windows 3.TCP1. 基本接口2. 客户端3. 服务端1.版本12.版本23.版本34.版本4 三、守护进程尾序 一、再识网络 1. 端口号 在…

RT-Thread 时钟 timer delay 相关

前言 此处,介绍对delay 时钟 timer 这几部分之间的关联和相关的知识点;本来只是想介绍一下 delay的,但是发现说到delay 不先 提到 先验知识 晶振\时钟\时钟节拍\定时器 好像没法解释透彻,所以就变成了 晶振\时钟\时钟节拍\定时器\delay 的很简单的概括一遍;并附带上能直接运行的…

【数据结构】链式队列

链式队列实现&#xff1a; 1.创建一个空队列 2.尾插法入队 3.头删法出队 4.遍历队列 一、main函数 #include <stdio.h> #include "./3.linkqueue.h" int main(int…

备考2025年AMC8数学竞赛:2000-2024年AMC8真题练一练

我们今天来随机看五道AMC8的真题和解析&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。 为帮助孩子们更高效地备考&#xff0c;我整理了2000-2004年的全部AMC8真题&#xff0c;并且独家制作了多种在线练…

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频,前端代码生成物大翻新

Rust通用代码生成器莲花发布红莲尝鲜版二十一发布介绍视频&#xff0c;前端代码生成物大翻新 Rust通用代码生成器发布了红莲尝鲜版二十一的最新介绍视频&#xff0c;前端代码生成物大翻新。视频请见&#xff1a; Rust通用代码生成器&#xff1a;莲花&#xff0c;红莲尝鲜版二…

构建生物医学知识图谱from zero to hero (3):生物医学命名实体识别和链接

生物医学实体链接 🤓现在是激动人心的部分。对于NLP和命名实体识别和链接的新手,让我们从一些基础知识开始。命名实体识别技术用于检测文本中的相关实体或概念。例如,在生物医学领域,我们希望在文本中识别各种基因、药物、疾病和其他概念。 生物医学概念提取 在这个例子中…

爬虫知识--03

数据存mysql import requests from bs4 import BeautifulSoup import pymysql# 链接数据库pymysql conn pymysql.connect(userroot,password"JIAJIA",host127.0.0.1,databasecnblogs,port3306, ) cursor conn.cursor() cursor conn.cursor()# 爬数据 res request…

Linux之ACL访问控制列表

一、ACL权限的介绍 1.1 什么是ACL 访问控制列表&#xff08;ACL&#xff09;是一种网络安全技术&#xff0c;它通过在网络设备&#xff08;如路由器、交换机和防火墙&#xff09;上定义一系列规则&#xff0c;对进出接口的数据包进行控制。这些规则可以包含“允许”&…

计算机网络面经_体系结构一文说清

编辑&#xff1a;平平无奇的羊 目录 基础 1. 计算机网络结构体系 三种模型之间的区别&#xff1a; 如何背诵&#xff1a; 进阶 OSI七层模型&#xff1a; TCP/IP四层模型&#xff1a; TCP/IP五层模型 总结 字节实习生为大家带来的是计算机网络面经系列博文&#xff0c;由浅…