加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

可能是全网最好的MySQL重要知识点 | 面试必备

发布时间:2019-07-26 20:46:48 所属栏目:移动互联 来源:佚名
导读:问题有点问题党的意思,但但愿你在看了文章之后不会有这个设法这篇文章是作者对之前总结的 MySQL 常识点做了完美后的产品,可以用往返首MySQL基本常识以及备战MySQL常晤口试题目。 什么是MySQL? MySQL 是一种相关型数据库,在Java企业级开拓中非经常用,因

MySQL的根基存储布局是页 (记录都存在页里边) :

也许是全网最好的MySQL重要常识点 | 口试必备
也许是全网最好的MySQL重要常识点 | 口试必备
  • 各个数据页可以构成一个双向链表
  • 每个数据页中的记录又可以构成一个单向链表

- 每个数据页城市为存储在它里边儿的记录天生一个页目次,在通过主键查找某笔记录的时辰可以在页目次中行使二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录- 以其他列(非主键)作为搜刮前提:只能从最小记录开始依次遍历单链表中的每笔记录。

以是说,假如我们写select * from user where indexname = 'xxx'这样没有举办任何优化的sql语句,默认会这样做:

  1. 定位到记录地址的页:必要遍历双向链表,找到地址的页
  2. 从地址的页内中查找响应的记录:因为不是按照主键查询,只能遍历地址页的单链表了

很明明,在数据量很大的环境下这样查找会很慢!这样的时刻伟大度为O(n)。

索引做了些什么可以让我们查询加速速率呢?着实就是将无序的数据酿成有序(相对):

也许是全网最好的MySQL重要常识点 | 口试必备

要找到id为8的记录扼要步调:

也许是全网最好的MySQL重要常识点 | 口试必备

很明明的是:没有效索引我们是必要遍历双向链表来定位对应的页,此刻通过 “目次” 就可以很快地定位到对应的页上了!(二分查找,时刻伟大度近似为O(logn))

着实底层布局就是B+树,B+树作为树的一种实现,可以或许让我们很快地查找出对应的记录。

以下内容清算自:《Java工程师修炼之道》

什么是最左前缀原则?

MySQL中的索引可以以必然次序引用多列,这种索引叫作连系索引。如User表的name和city加连系索引就是(name,city),而最左前缀原则指的是,假如查询的时辰查询前提准确匹配索引的左边持续一列或几列,则此列就可以被用到。如下:

  1. select * from user where name=xx and city=xx ; //可以掷中索引 
  2. select * from user where name=xx ; // 可以掷中索引 
  3. select * from user where city=xx ; // 无法掷中索引 

这里必要留意的是,查询的时辰假如两个前提都用上了,可是次序差异,如 city= xx and name =xx,那么此刻的查询引擎会自动优化为匹配连系索引的次序,这样是可以或许掷中索引的。

因为最左前缀原则,在建设连系索引时,索引字段的次序必要思量字段值去重之后的个数,较多的放前面。ORDER BY子句也遵循此法则。

留意停止冗余索引

冗余索引指的是索引的成果沟通,可以或许掷中就必定能掷中 ,那么 就是冗余索引如(name,city )和(name )这两个索引就是冗余索引,可以或许掷中后者的查询必定是可以或许掷中前者的 在大大都环境下,都应该只管扩展已有的索引而不是建设新索引。

MySQLS.7 版本后,可以通过查询 sys 库的 schema_redundant_indexes 表来查察冗余索引

Mysql如作甚表字段添加索引?

1.添加PRIMARY KEY(主键索引)

  1. ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

2.添加UNIQUE(独一索引)

  1. ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

3.添加INDEX(平凡索引)

  1. ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 

4.添加FULLTEXT(全文索引)

  1. ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

5.添加多列索引

  1. ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` ) 

存储引擎

一些常用呼吁

查察MySQL提供的全部存储引擎

mysql> show engines;

也许是全网最好的MySQL重要常识点 | 口试必备

从上图我们可以查察出 MySQL 当前默认的存储引擎是InnoDB,而且在5.7版本全部的存储引擎中只有 InnoDB 是事宜性存储引擎,也就是说只有 InnoDB 支持事宜。

查察MySQL当前默认的存储引擎

我们也可以通过下面的呼吁查察默认的存储引擎。

  1. mysql> show variables like '%storage_engine%'; 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读