博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL面试题——索引
阅读量:2430 次
发布时间:2019-05-10

本文共 1603 字,大约阅读时间需要 5 分钟。

1.什么是索引

在关系型数据库中,索引是对表中一列或多列的值进行排序的一种存储结构,他是表中一列或者多列的值,而且其中包含了对应表中记录的引用指针,更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件,它是要占据物理空间的

举个例子:首先,先假设有一张表,表有10万个记录,其中有一条记录我们已知a=‘1’,如果想要拿到对应记录的话,需要sql的语句是 SELECT * FROM XXX WHERE A=‘1’
一般情况下,对于查询语句,在没有建立索引的时候,MySQL会进行全表扫描,而且不扫描完10万个记录不会停止,如果在某一列上建立索引,那么MySQL相当于只扫描这一列,而且这一列已经排序好,找到对应结果或结果集就可以直接返回

2.索引的优缺点

索引的优点:

  • 可以大大加快数据的检索速度,这也是创建索引的最主要的原因
  • 通过使用索引,可以在查询的过程中,使用优化隐藏起,提高系统的性能

索引的缺点:

  • 时间方面:创建索引和维护索引要耗费时间,具体的,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执行效率(即对于大量的写操作,MySQL会花费大量的时间动态维护索引文件)
  • 空间方面:索引需要占用物理空间

3.索引的使用场景

3.1WHERE

当我们使用WHERE对表中的记录进行筛选时,如果没有对表中的列建立索引,则MySQL会对全表进行扫描,即使扫到了符合条件的,MySQL也是会继续扫描下去

3.2ORDER BY

当我们使用ORDER BY将查询结果按照某个字段排序时,如果该字段没有建立索引,那么执行计划会将查询出的所有数据使用外部排序(将数据从硬盘分批读取到内存使用内部排序,最后合并排序结果)

但是如果我们对该字段建立索引,那么由于索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取出数据即可,而不用像上述那样取出所有的数据进行排序再返回某个范围内的数据

3.3索引覆盖

如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描),减少了IO时间这叫做索引覆盖,因此我们需要尽可能的在select后只写必要的查询字段,以增加覆盖的几率

4.索引类型

主键索引(PRIMARY KEY):数据列不允许重复,不允许NULL,一个表只能有一个主键

  • 可以通过 ==ALTER TABLE table_name ADD PRIMARY KEY(column)==创建主键索引

唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引

  • 可以通过==ALTER TABLE table_name ADD UNIQUE(column);==创建唯一索引
  • 可以通过==ALTER TABLE table_name ADD UNIQUE(column1,column2);==创建唯一组合索引

普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值

  • 可以通过==ALTER TABLE table_name ADD INDEX index_name(column):==创建普通索引
  • 可以通过==ALTER TABLE table_name ADD INDEX index_name(column1,column2,column3);==创建组合索引

全文索引:是目前搜索引擎使用的一种关键技术

  • 可以通过==ALTER TABLE table_name ADD FULLTEXT(column);==创建全文索引
补充:主键索引和唯一索引的区别
  • 一张表只能有一个主键,但可以创建多个唯一索引
  • 主键创建后一定包含一个唯一索引,唯一索引并不一定是主键
  • 主键的值不允许为NULL,但唯一索引的值可以为NULL
  • 主键可以作为外键,唯一索引不行

转载地址:http://oqjmb.baihongyu.com/

你可能感兴趣的文章
去年我年薪 30W,今年我一天做 3 顿饭
查看>>
入职大厂,我容易吗?
查看>>
《互联网人退化简史》
查看>>
CTO 写的低级 Bug 再致网站被黑,CEO 的号都被盗了!
查看>>
955 加班少的公司名单来了!
查看>>
狂赚 1227 亿!腾讯员工 2020 年人均年薪 81 万;小米员工人均年薪 45 万
查看>>
漫画:什么是加密算法?
查看>>
程序员有话说 |当那个不靠谱的程序员跟我做同一个项目时
查看>>
怎样以程序员的方式来用百度呢?
查看>>
程序员是如何运用增长思维找到女朋友?
查看>>
@程序员,离职让企业损失近900亿,还遭疯抢!他凭什么?
查看>>
如何用 Python 一键查房价?
查看>>
累死累活干不过写 PPT 的?新东方年会吐槽视频俞敏洪不罚反奖 12 万!
查看>>
“离开360时,它只给了我一块钱”
查看>>
PDF 翻译神器,再也不担心读不懂英文 Paper 了
查看>>
漫话:如何给女朋友解释什么是RPC
查看>>
@程序员,为什么别人比你优秀?!
查看>>
你的红包狂欢夜,互联网巨头们的流量争夺战
查看>>
春晚过去 4 天了,你卸载百度 APP 了吗?
查看>>
中国移动互联网十年
查看>>