MySQL删除数据的方式
以MySQL 5.7为例,数据库删除数据的方式一共有以下三种:
- delete
- truncate
- drop
以上三种方式都可以删除数据,但是使用场景是不同的。 对于整个表进行删除的执行速度来说: drop > truncate >> delete
MySQL删除数据的方式-delete
delete是属于数据库的DML操作语言,一般是根据条件逐行进行删除。 使用delete删除数据时,数据库只能删除数据不能删除表的结构,并且会触发数据库的事务机制。 delete执行时,会先将所删除数据缓存到rollback segment中,事务commit之后生效; 在InnoDB中,使用delete其实并不会真正的把数据删除,是一种逻辑删,数据库底层实际上只是给删除的数据做了一个已删除的标记,因此,删除数据后的表占空间大小和删除前是一样的.
MySQL删除数据的方式-drop
drop属于数据库DDL定义语言,同 truncate ,执行后立即生效,无法找回。 drop table table_name立刻释放磁盘空间 ,drop 语句将删除表的结构、被依赖的约束(constraint)、触发器(trigger)、索引(index); 依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
删除数据的方式-TianMu 引擎的支持情况
目前StoneDB的TianMu引擎是支持 truncate 语句 和 drop 语句的,但是delete语句目前还不支持。
TianMu引擎需要不需要delete?
TianMu引擎设计的初衷
TianMu是一个列式存储引擎,列式存储的出现主要是为了方便快捷查询和高效存储大量同类型的数据而设计的,主要使用场景就是OLAP场景。下面是OLAP场景的部分关键特征: ①绝大多数是读请求 ②数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。 ③已添加到数据库的数据不能修改。 ④对于读取,从数据库中提取相当多的行,但只提取列的一小部分。 ⑤列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节) ⑥处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行) ⑦事务不是必须的 ⑧对数据一致性要求低
目前行业现状
支持列存储的数据库类型 | 是否支持delete | 备注 |
---|---|---|
MariaDB ColumnStore | 支持 | |
SQL Server | 支持 |