mysql基础

简单的sql语句

建表语句:

CREATE TABLE `student` (

`name` varchar(36) NOT NULL COMMENT '姓名',

`BILL_NO_TYPE` varchar(30) NOT NULL COMMENT '单据类型',

`sex` text CHARACTER COMMENT '性别',

`RECORD_VERSION` int(10) DEFAULT '0' COMMENT '版本号乐观锁'

)

ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT='新增表';

查询语句:select * from student

更新语句: update studentset age=? where name=?

删除语句: delete from studentwhere name=?

插入语句: insert into student(name,age,sex) values ('姓名','18','男');

问1:什么是存储引擎?

答:存储引擎这个词只在mysql中存在,是数据的一种存储方式,常见的有innoDB和MyISAM。

mysql支持很多存储引擎,每一个存储引擎都对应了一种不同的存储方式。

每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎。

问2:INNODB和MySIAM的区别,优缺点分别有哪些?

答: 存储格式:INNODB数据存储在一个文件中xxx.ibd文件,MySIAM用三个文件组织一张表

xxx.frm(存储格式的文件)

xxx.MYD(存储表中数据的文件)

xxx.MYI(存储表中索引的文件)

优缺点:InnoDB支持事务,索引,行级锁,数据的安全有保障。但是数据结构导致它无法被压缩,转为只读文件

MyISAM不支持事务,但是文件可被压缩,节省存储空间,可被转换成只读,提高检索效率。

1、MYISAM是最先的存储引擎,Innodb是mysql5.5版本后的默认数据库;

2、MYISAM采用三种文件的方式组织一张表,三个文件分别存储表的定义,表的数据,表的索引; 所以它可以被压缩,节省存储空间,可以被转换成只读表,提交检索效率; Innodb表结构存储在一个文件中(.frm),数据存储在表空间中(.ibd),无法被压缩,无法被转换成只读; 3、MYISAM支持事务,Innodb支持事务,行级锁,外键;

4、InnoDB存储引擎在MySQL数据库崩溃之后提供自动恢复机制。InnoDB支持级联删除和级联更新;

5、INNODB有缓冲池?

问3:什么是索引? 这里是简略回答

答:索引是一种数据结构,inndDB存储引擎通常使用B+树这种结构来构建索引.

B+树(一种数据结构,MySQL索引采用)

 

1、所有数据均存储在叶子节点上

2、叶子结点之间存在双向链表(该图没画出),索引范围查询较快;

===========================================================================================

2、最左前缀原则:查询尽量从索引的最左列开始,并且不跳过中间列,不然会导致索引失效或者只用到部分索引。

==========================================================================================

问4:什么是数据页?

答:页是存储引擎每次进行磁盘IO的基本数据单位,一般为16KB;

问5:聚簇索引和非聚簇索引的区别?

答:INNODB中,聚簇索引就是按照每个表的主键构造一颗B+树,同时叶子节点存放的就是整张表的数据, 也将聚簇索引的叶子节点称为数据页,这个特性决定了索引组织表中数据也是索引的一部分; 一般建表都会采用一个自增主键做聚集索引,如果没有的话MySQL会默认创建一个 rowid(自增)作为默认主键的;

      日常工作中,添加的索引都是辅助索引(二级索引),就是一个为了寻找主键索引而设立的索引,索引的每个叶子节点 都会默认一个存储主键ID,没有主键则存储rowid,可以根据这个到主键索引中找到需要的值,这个操作在mysql中叫做回表; 

问6:为什么不建议用UUID做主键?

答:①UUID是无序的,做索引,每次增加都会打乱索引的结构,不想自增主键,每次直接加在后面即可。

       ②UUID太长了,节省资源。

问7:什么是联合(聚合)索引?

答:多个字段联合建立一个索引,叶子节点顺序存储这几个字段的数据。

所以在使用查询语句的时候,尽量遵守最左前缀原则(延伸点2),不然会导致索引失效;

=============================================================================================

问8:假设一张表中有八条数据1-8,a为主键,select * from a>1是否用到索引,a>6是否用到索引?

答:a>1未用到,a>6用到了,原因是MySQL优化器它计算了用索引和走全表扫描的成本,然后选择性能消耗少的方法

一个需要回表7次,回表也会耗费性能。

问9:什么是覆盖索引?

答:建立的辅助索引(二级索引)中,叶子结点保存索引值和主键值,已经包含了查询需要返回的数据,不需要再进行回表操作,这就是覆盖索引。

问10:什么是索引下推?

答:在二级索引中,根据查询条件进行了二次筛选,减少了回表的行数。

SET optimizer_switch = 'index_condition_pushdown=off';  关闭索引下推

问11:唯一索引和普通索引的区别?

答:两者在查询时基本没有什么区别,因为索引排序;但是唯一索引在每次更新时会进行查询,判断是否重复。

问12:为什么要使用B+树这种索引?

答:hash索引是使用某种hash算法来查找数据的,这就导致了它无法进行范围查询,不支持排序,不支持模糊查询,B树的叶子节点之间互相独立。

问13:加了索引一定会用到吗?

答:不一定,mysql在执行一条查询sql过程中,有一重优化器,判断哪种查询方式消耗资源更少,就用哪种

比如,一个字段只有两个值,性别男和女,或者boolean值,这种情况下使用和不使用索引都没什么区别,mysql可能就直接用全表扫描了。

问14:描述下索引失效(部分失效)的几种场景?

答:

1、不符合最左前缀原则,比如like语句后面 '%666%'

2、索引的列范围太过于单一,比如boolean

3、如果条件中有or,即使部分条件带索引也不一定用

4、存在索引列的数据类型隐式转换,比如列中的数据类型是字符串,那么查询条件中一定要用引号包起来,否则不使用索引

5、查询条件中存在函数计算

6、order by 不符合顺序会导致部分索引失效

问13:between and,>,<都会用到索引吗?

答:是的。

问14:正确理解MySQL的MVCC及其实现原理

答:关注SnailMann,搜索mvcc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值