SQL中的drop、delete、truncate都表示删除,但是三者有一些差别
阿里内部资料delete和truncate只删除表的数据不删除表的结构 速度,一般来说: drop> truncate >delete delete
语句是dml,这个操作会放到rollback segement中,事务提交之后才生效; 如果有相应的trigger,执行
的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚.
操作不触发trigger.
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。
先创建一张临时表,把不删除的数据存在临时表中,然后truncat删除这张表里的数据,再将临时表中的数据读取出来insert到这张表中。
从一个表向 另一个表写入数据的sql
INSERT INTO 目标表 (字段1, 字段2, …) SELECT 字段1, 字段2, … FROM 来源表;
(这里的字段必须保持一致, 类型与数量)
MySQL日志类型分为错误,常规,慢速查询,二进制日志。
(1) 错误日志:记录MySQL数据库的一般状态信息及报错信息,是我们对于数据库常规报错处理的常用日志。
(2) 常规日志:记录MySQL所有执行成功的SQL语句信息,较少使用。
(3) 慢速查询日志:记录所有条件内的慢的SQL语句,优化的一种工具日志。能够帮我们定位问题。
(4) 二进制日志:用于数据库数据的备份及恢复。
-- 从 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