当前位置:网站首页>索引index
索引index
2022-08-09 11:38:00 【小刘学安卓】
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件),不然创建的索引就没有意义了。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
1、索引的优/缺点:
优点:
- 类似于书籍的目录索引,提高数据检索的效率,降低数据库的IO成本。
- 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
缺点:
- 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
- 建立索引会占用磁盘空间的索引文件。
2、索引类型
索引共有四种:主键、普通索引、唯一索引和全文索引。
PRIMARY 主键: 就是 唯一 且 不能为空;
UNIQUE 唯一索引: 不允许有重复,但允许为NULL
INDEX : 普通索引
FULL TEXT 全文索引: 用于在一篇文章中检索文本信息
举个例子来说,假如有一个商场会员卡的表,包含字段如下:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
1、会员编号,作为主键,使用 PRIMARY;
2、如果在“会员姓名”字段上建索引,可以选择普通索引(会员姓名可能重复);
3、如果在“会员身份证号码”字段上建索引,可以选择唯一索引(身份证唯一且不可重复);
4、如果在“会员备注信息”字段上建索引,可以选择 FULLTEXT索引,全文搜索;
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
3、单列/组合 索引
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
4、查看索引
SHOW INDEX FROM table_name
5、索引的数据结构
MySql官方对索引的定义为:索引是帮助MySql高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
如下面的示意图所示:
左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和—个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引是数据库中用来提高性能的最常用的工具。
边栏推荐
猜你喜欢
链表基本操作(详解)
This application has no explicit mapping for /error, so you are seeing this as a fallback
【面试高频题】可逐步优化的链表高频题
【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体
《数字经济全景白皮书》银行业智能营销应用专题分析 发布
F280049库函数API编程、直接寄存器控制编程和混合编程方法
mysql + redis + flask + flask-sqlalchemy + flask-session 配置及项目打包移植部署
web课程设计
【Data augmentation in NLP】——1
结构体知识点整合(前篇)
随机推荐
ICML 2022 | Out-of-Distribution Detection with Deep Nearest Neighbors
信号量SIGCHLD的使用,如何让父进程得知子进程执行结束,如何让父进程区分多个子进程的结束
F280049库函数API编程、直接寄存器控制编程和混合编程方法
PM2之配置文件
ZOJ1298(单源最短路径)
使用.NET简单实现一个Redis的高性能克隆版(四、五)
Win10调整磁盘存储空间详解
MySQL执行sql语句的机制
UNIX哲学
人体解析(Human Parse)开源数据集整理
【C language】动态数组的创建和使用
OC-块对象
Paper Sharing | ACL2022 | Argument Relation Extraction Based on Transfer Learning
web课程设计
电解电容漏电流及均压
PAT1014 未解决
【重要】C语言进阶 -- 自定义类型:结构体、枚举、联合
fidder为什么不会抓包的问题
ACM最长不下降子序列问题
从零开始Blazor Server(9)--修改Layout