当前位置:网站首页>索引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的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和—个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。索引是数据库中用来提高性能的最常用的工具。
边栏推荐
猜你喜欢

BISS绝对值编码器_TI方案_线路延迟补偿

matlab simulink的scope 示波器光标如何移动记录

mysql8.0和navicat premium15下载安装

ICML 2022 | Out-of-Distribution Detection with Deep Nearest Neighbors

Redis高可用部署

UNIX Philosophy

Redis的下载安装

七夕?程序员不存在的~

wpf path xaml写法和c#写法对比

Semaphore SIGCHLD use, how to make the parent that the child performs over, how to make the distinction between multiple child processes. The end
随机推荐
fork创建多个子进程
《数字经济全景白皮书》银行业智能营销应用专题分析 发布
UNIX哲学
LeetCode 1413.逐步求和得到正数的最小值
PAT1003
proto3-2语法
【C language】typedef的使用:结构体、基本数据类型、数组
Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接
How tall is the B+ tree of the MySQL index?
OC-NSTimer
二重指针-char **、int **的作用
PTA 实验7-5 输出大写英文字母(10 分)
七夕?程序员不存在的~
mysql参数配置学习----临时表内存表的设置
redis的缓存穿透、缓存雪崩、缓存击穿怎么搞?
C语言中信号函数(signal)的使用
【Robustness of VQA-1】——2019-EMNLP-Don’t Take the Easy Way Out
ACM最长不下降子序列问题
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
BeanFacroty和FactoryBean到底是什么?AppliacationContext它又是什么?