数据库面试题——索引(一)
谈谈你对索引的理解
索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引可以快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。
优点:
通过创建唯一索引,可以保证数据库表中每一行数据的唯一性。
可以大大加快数据的查询速度,这也是创建索引的主要原因。
在实现数据的参考完整性方面,可以加速表和表之间的连接。
在使用分组和排序子句进行数据查询时,也可以显著减少查询中分组和排序的时间。
缺点:
创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
索引需要占磁盘空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
索引有哪几种
普通索引和唯一索引
普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值。
唯一索引要求索引列的值唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。
主键索引是一种特殊的唯一索引,不允许有空值。
单列索引和组合索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引是指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。
全文索引
全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。
空间索引
空间索引是对空间数据类型的字段建立的索引。MySQL使用SPATIAL关键字进行扩展,使得能够用创建正规索引类似的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MyISAM的表中创建。
聚集索引和非聚集索引
聚集索引:
表数据按照索引的顺序来存储,索引项的顺序与表中记录的物理顺序一致。对于聚类索引,叶子节点存储了真实的数据行,不再有单独的数据页。一张表最多只能有一个聚类索引。
非聚集索引:
表数据存储顺序与索引顺序无关。对于非聚集索引,叶节点包含索引字段值以及指向数据页,数据行的逻辑指针。
创建索引的方法
一.create
基本语法:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (col_name [length],...) [ASC|DESC]
案例:
CREATE INDEX index_name
ON table_name (column)
USING BTREE;
index_name 是索引的名称,table_name 是要在其上创建索引的表的名称,column1、column2、... 是要在其上创建索引的列的名称。可以在括号中指定多个列。使用using字句设置索引类型,创建了一个 B-tree 类型的索引
二.alter
基本语法:
ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (col_name[length],...) [ASC|DESC]
案例
ALTER TABLE book ADD UNIQUE INDEX UniqidIdx (bookId);
在bookId字段上建立名称为UniqidIdx的唯一索引
MySQL怎么判断要不要加索引
建议按照如下的原则来创建索引:
当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引需能确保定义的列的数据完整性,以提高查询速度。
在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
只要创建了索引,就一定会走索引吗?
不一定。
比如,在使用组合索引的时候,如果没有遵从“最左前缀”的原则进行搜索,则索引是不起作用的。
判断索引有没有生效
可以使用EXPLAIN语句查看索引是否正在使用。
举例,假设已经创建了book表,并已经在其year_publication字段上建立了普通索引。执行如下语句:
EXPLAIN SELECT * FROM book WHERE year_publication=1990;
EXPLAIN语句将为我们输出详细的SQL执行信息,其中:
possible_keys行给出了MySQL在搜索数据记录时可选用的各个索引。
key行是MySQL实际选用的索引。
如果possible_keys行和key行都包含year_publication字段,则说明在查询时使用了该索引。
MySQL的索引为什么用B+树?
B+树由B树和索引顺序访问方法演化而来,它是为磁盘或其他直接存取辅助设备设计的一种平衡查找树,在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,各叶子节点通过指针进行链接。如下图:
B+树索引在数据库中的一个特点就是高扇出性,例如在InnoDB存储引擎中,每个页的大小为16KB。在数据库中,B+树的高度一般都在2~4层,这意味着查找某一键值最多只需要2到4次IO操作,这还不错。因为现在一般的磁盘每秒至少可以做100次IO操作,2~4次的IO操作意味着查询时间只需0.02~0.04秒。
模糊查询语句中如何使用索引?
方法一:
反转模糊查询的字段,但是注意,对于"%keywork%"的索引,此方法是无效的。
如:
select * from student where name like '%三';
改为:
select * from student where reverse(name) like reverse('%三');
方法二:
like查询百分号前置,并不是100%不会走索引。如果只select索引字段,或者select索引字段和主键,也会走索引的。
数据库面试题——索引(一)相关推荐
- 混合索引_数据库面试题:查询在什么情况下不?索引-数据库知识点
查询在什么情况下不⾛索引 数据库面试题 ⾸先,我们可以说通过explain去排查⼀个慢查询,进⽽找到它的索引(参看第五题),当创建索引却不⾛索引时,我们就需要考虑到优化器的问题. 在⼀条单表查询语句真 ...
- datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...
原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...
- 计网/数据库面试题(更新中ing~~)
计网/数据库面试题(更新中ing~~) <计算机网络> 1. OSI七层模型.设备 (传输层)协议的多路分用和复用 2. TCP/IP四层模型==五层模型 (传输层)TCP和UDP协议对比 ...
- SQL编程软件测试,编程程题库之软件测试8大常见数据库面试题
原标题:编程程题库之软件测试8大常见数据库面试题 一.事务的四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程一致性,事务前后,数据总额一致持久性,一旦事务提交 ...
- mysql纵表 主键_数据库面试题-sql语句
原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...
- C# 联合查询_直击数据库面试题:数据库查询语句
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...
- MySQL数据库面试题(2021最新版)
文章目录:http://github.crmeb.net/u/defu 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 ...
- Oracle数据库面试题 精选 Oracle 面试题
Oracle数据库面试题 1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法.适用于所有模式的数据库. 优点 1. 是非常快速 ...
- 复试面试-数据库面试题
将网上常见的数据库面试题整理一下,方便自己和有需要的人学习. 1.事务 概念:访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开 ...
最新文章
- 推荐7款实用强大的神器工具,建议你先收藏,总有一天你会用到!
- Vue中动态设置页面title
- 如何在Python中附加文件?
- 图说数据中心新风节能技术
- 彩色手绘情节人插画装饰素材,psd分层利于应用!
- php pdo 存储过程的返回所有结果,PHP_PDO 调用存储过程,返回参数问题
- L1-047 装睡-PAT团体程序设计天梯赛GPLT
- 10种用户友好的验证码
- matlab 修正后阿尔法,修正后的阿尔法均值滤波器Alpha.ppt
- 谈谈象棋的基本功《二》复盘篇
- 阿里无线11.11 | 手机淘宝主会场实践之路
- 美女画廊(点击上面的图片下面进行显示)
- 如何在软件开发行业选择一条正确的职业道路?
- pip install lap出现问题
- 防灾科技学院图书馆大数据分析,2018读书报告丨来看一下谁是全年的阅读之星?
- 周鸿袆:给程序员忠言逆耳的几条建议
- R语言实战应用精讲50篇(三十)-R语言ggplot2绘制精美高级地图
- cba比赛比分预测_今晚五场CBA比赛预测
- Windows资源管理器占用内存暴涨解决/无响应处理方案
- 服务器共享文档密码设置,服务器共享模式怎么设置密码
热门文章
- 计算机b级考试题型分值分布,大学英语四级考试题型和分值分配
- 协同过滤算法(基于用户)
- springboot整合ActiveMQ(点对点和发布订阅)
- Visual Studio 2008 安装出错 无法安装 的解决办法
- Php session_start错误,PHP 解决错误:Warning: session_start()... 的方法
- 仿抖音点赞效果实现 ——————自定义View
- LInux上返回到切换目录前的目录
- Linux 块子系统优化
- mysql客户端如何登录_MySQL-客户端登录问题
- CSS漂亮搜索框代码