MySQL面试(二)
1、为什么索引遵循最左匹配原则?
当B+树的数据项是符合的数据结构,比如(name,age,sex)的时候,B+树是按照从左到右的顺序建立搜索树的。比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,B+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里 查询。比如当(张三,F)这样的数据来检索时,B+树可以用name来指定搜索方向,但下一个字段age的缺失,所以 只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配 特性。
2、主键索引 唯一索引 普通索引的区别?
主键是一种约束,索引是一种特殊的文件
,两者在本质上是不同的。
索引
是一种特殊的文件
,它们包含着对所有记录的引用指针
。索引可以极大地提高数据查询速度(好比一本书的目录)
,但是会降低插入删除更新表的速度
,因为在执行这些操作是,还要操作索引文件用来维护
,所以说索引不是建的越多越好而是要建在合理的字段。
索引的遵循原则
:
1、最左侧原则
,表的最左侧的一列,往往数据不会发生改变,不影响其他列的数据;
2、命名短小原则
,索引命名过长会使索引文件变大
,损耗内存
。
普通索引
:(由关键字KEY或INDEX定义的索引)的唯一任务是
加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值
。如果能确定某个数据列将只包含彼此各不相同的值
,在为这个数据列常创建索引时应该用就用关键字UNIQUE
把他定义成一个唯一索引
。也就是说,唯一索引可以保证数据记录的唯一性
。
唯一索引
:不允许两行具有相同的索引值。
主键
:是一种特殊的唯一索引,一张表中只能定义一个主键索引
,通常有一列或列组合
,用于唯一标识一条记录
,使用关键字PRIMARY KEY
来创建。为表定义一个主键
将自动创建主键索引(聚簇索引)
。当在查询中使用主键索引时,它还允许快速访问数据
。
联合索引
:可以覆盖多个数据列
,像INDEX(columnA, columnB)
索引,这就是联合索引。
主键索引和唯一索引的区别:
(1) 对于主键
/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引
;
(2) 主键不一定只包含一个字段
,所以在主键的其中一个字段
建唯一索引
还是有必要的;
(3) 主键可作外键
,唯一索引不可;
(4) 主键不可为空
,唯一索引可;
(5) 主键可是多个字段的组合
;
(6) 主键与唯一索引不同的是:
a.有not null
属性;
b.每个表只能有一个
。
(7) 主键索引一定是唯一索引, 唯一索引不是主键索引
(8) 主键可以与外键 构成 参照完整性约束
, 防止数据不一致
MySQL面试(二)的更多相关文章
- 《MySQL面试小抄》索引考点二面总结
<MySQL面试小抄>索引考点二面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟! 囧囧表示:小白面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点 ...
- java架构之路-(面试篇)Mysql面试大全
说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案. 1.索引是什么 ...
- 《为研发同学定制的MySQL面试指南》-- 连载中
Hi大家好,我是来自博客园的赐我白日梦! 为大家带来MySQL面试专题!全文110篇!以问答的方式,由浅入深的帮你应对各类MySQL面试题的狂轰滥炸!当然也不乏会分享一些高阶读写分离数据库中间件原理及 ...
- 《MySQL面试小抄》索引考点一面总结
<MySQL面试小抄>索引考点一面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟 囧囧表示:面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! ...
- MySQL优化二(连接优化和缓存优化)
body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...
- 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建
从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...
- python/MySQL练习题(二)
python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...
- Python/MySQL(二、表操作以及连接)
Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...
- mysql进阶(二十九)常用函数
mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...
- mysql进阶(二十八)MySQL GRANT REVOKE用法
mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...
随机推荐
- LeetCode Top 100 Liked Questions in Golang(updating...)
leetcode go语言版本,主要为了熟悉下语言 1. Two Sum 双指针版本, O(NlogN) func twoSum(nums []int, target int) []int { val ...
- typroa 和markdown基操
目录 标题 一级标题 二级标题 字体 图片 来插入图片,如在同意文件夹上,可直接加图片名 数学公式 编辑表格 标题 一级标题 二级标题 三级标题 无序标题 *加空格,无序标题 也可以使用ctrl = ...
- java 使用poi导出Excel,设置单元格保护不可编辑
//sheet表加密:等效excel的审阅菜单下的保护工作表 sheet.protectSheet(new String("333"));//333是密码 更多设置请参考:http ...
- TZOJ 4359: Partition the beans (二分)
描述 Given an N x N square grid (2 <= N <= 15) and each grid has some beans in it. You want to w ...
- Code Force 429B Working out【递推dp】
Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...
- jmeter响应代码为乱码
1.在请求的前面添加BeanShell PostProcessor 输入prev.setDataEncoding("UTF-8"); 2.当响应数据或响应页面没有设置编码时,jme ...
- jsp中几注释的区别
1).JSP页面中的HTML注释 SP页面中的HTML注释使用“<!—”和“-->”创建,它的具体形式如下所示: <!-- 注释内容 --> 当它出现在JSP页面时,微蘑菇将不 ...
- jQuery 无刷新评论
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql 中 DATE_ADD函数和 DATE_SUB函数用法
mysql 中 DATE_ADD(date,INTERVAL expr type) 和 DATE_SUB(date,INTERVAL expr type) 这些函数执行日期运算. date 是一个 D ...
- 添加ODBC数据源
添加ODBC数据源