问题描述:
很多人都知道在oracle中有一个叫“水平位”的概念,我不知道此概念是否一样适用于mssql数据库。
意思大概是:
比如A表,里面有100万条记录,由于数据量很大,所以查询会比较慢。假如你
使用delete语句删除99万9999条,最后只剩下一条记录,
那查询速度应该会很快的了,但其实不然。
因为使用delete语句,数量是少了,但是它的“水平位”还是100万,换言之,它查询的对象
依然是100万条。
我不知道此概念是否一样适用于mssql数据库
我有这样的一个需求,由于mssql数据库日志表每天的量太大,所以
设想是程序执行时先delete一个月或三个月前的旧数据,以减轻它的体量。
但是呢,我又担心所谓的“水平位”问题
提出问题:
1.我这个担心有必要吗,mssql有这种情况出现吗?
2.如果有,我这个需求的最佳解决方案是什么?
关于数据库水平位的问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
19条回答 默认 最新
Watch the clown 2023-09-13 11:30关注首先,SQL SERVER是没有水平位概念,我理解你的意思是oracle中存在HWM,数据删除了但是高水位没有下降,因为它只能增加不能倒退,一般都是5个数据块往上叠加。
你可以说oracle用高水位标注管理数据,sql server用页的概念来操作数据,这个页呢每次数据删除以后会被重新利用,不会留下空白空间
针对于你提到的日志问题,可以分批对日志表进行删除,写一个循环即可DECLARE @RowCount INT = 1; WHILE @RowCount > 0 BEGIN DELETE TOP (10000) FROM 日志表 WHERE 日期 < DATEADD(MONTH, -1, GETDATE()) SET @RowCount = @@ROWCOUNT; END本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用