MySQL数据库 面试题 补充

6.1.简单说一说drop、delete与truncate的区别

SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
阿里内部资料delete和truncate只删除表的数据不删除表的结构 速度,一般来说: drop> truncate >delete delete
语句是dml,这个操作会放到rollback segement中,事务提交之后才生效; 如果有相应的trigger,执行
的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚.
操作不触发trigger.

6.2.VARCHAR(M)最多能存储的数据

MySQL对一条记录占用的最大存储空间是有限制的,除了BLOB或者TEXT类型的列之外,其他所有的列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过65535个字节。可以不严谨的认为,mysql一行记录占用的存储空间不能超过65535个字节。这个65535个字节除了列本身的数据之外,还包括一些其他的数据(storage overhead),比如说我们为了存储一个VARCHAR(M)类型的列,其实需要占用3部分存储空间:

1.真实数据

2.真实数据占用字节的长度

3.NULL值标识,如果该列有NOT NULL属性则可以没有这部分存储空间

假设varchar_size_demo只有一个VARCHAR类型的字段,那么该字段最大占用的65532个字节。因为真实数据的长度可能占用2个字节,NULL值标识需要占用1个字节。如果该VARCHAR类型的列没有NOT NULL属性,那最多只能存储65532个字节的数据。如果该列是ascii字符集,对应的最大字符数最大为65532;如果是utf8字符集,则对应的最大字符数为21844。

6.3.如果有一个很大的表,要删除里面95%的数据该怎么做

先创建一张临时表,把不删除的数据存在临时表中,然后truncat删除这张表里的数据,再将临时表中的数据读取出来insert到这张表中。

从一个表向 另一个表写入数据的sql

INSERT INTO 目标表 (字段1, 字段2, …) SELECT 字段1, 字段2, … FROM 来源表;

(这里的字段必须保持一致, 类型与数量)

6.4.MySQL日志文件怎么去存储

MySQL日志类型分为错误,常规,慢速查询,二进制日志。

​ (1) 错误日志:记录MySQL数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志。

​ (2) 常规日志:记录MySQL所有执行成功的SQL语句信息,较少使用。

​ (3) 慢速查询日志:记录所有条件内的慢的SQL语句,优化的一种工具日志。能够帮我们定位问题。

​ (4) 二进制日志:用于数据库数据的备份及恢复。

6.5.200万条记录从100万条开始取10条

-- 从 1000条后取 10 条
select student_id, student_name  from student  limit 1000, 10

OK
查询时间: 0.024s

-- 从第 100万条后取10条
SELECT student_id, student_name  from student  limit 1000000, 10

OK
查询时间: 0.934s

-- 先通过 主键索引排序 再查询
select student_id, student_name from student order by student_id limit 1000000,10

OK
查询时间: 0.457s

-- 先排除 前 100万条记录 再取10条
select student_id, student_name from student
 where student_id>=(select student_id from student order by student_id limit 1000000,1) limit 10;

OK
查询时间: 0.367s

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值