我希望这个问题对某人来说很容易回答:)
我有一个看起来像这样的表(隐藏了不重要的列)
CREATE TABLE [dbo].[Log](
[LogID] [int] IDENTITY(1,1) NOT NULL,
--several other columns
[Name] [nvarchar](512) NOT NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED
(
[LogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
现在我对该表做了一些索引,这也涉及将Name-column缩短到 256 宽度。但是当我更改此列时
ALTER TABLE Log ALTER COLUMN Name NVARCHAR(256) NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)
数据库增长了一个不平凡的数量。(是的,我仔细检查了 - 这是我在这里所做的唯一更改)该表总共有 90746 个条目,在更改表之前,SSMS 表示大小为 247.56MB。
但是在这次更新之后,数据库增长到了 336.13MB。
不知道这在这里是否重要,但SELECT @@VERSION得到Microsoft SQL Server …
如何使用 Oracle SQL Developer 编写查询以查找我的数据库使用了多少块?(表和索引)
我有一个 SQL Server(版本 11.0.5058)。我尝试从 bak 文件恢复数据库,但收到错误消息:
CREATE DATABASE 或 ALTER DATABASE 失败,因为产生的累积数据库大小将超过每个数据库 10240 MB 的许可限制。
有人告诉我,我没有 Express 实例,因此我没有 10GB 的数据库限制。我无法找到信息来验证这一点。虽然在Help->About下没有出现Express这个词。如何验证数据库限制信息?
可能是什么问题?这是我可以更改的配置吗?
我有一个数据库,由于一些愚蠢的代码问题,它已经大大增长。它现在是 24GB,其中大部分是非常不必要的日志信息(系统生成的调试信息)。
我的服务器位于云托管服务器上。由于文件大小,我现在有两个问题:
我支付存储费用。我很高兴为我的核心业务付费,但为愚蠢的数据付费似乎......
我的备份现在也很大。我每晚进行完整备份,然后将它们发送到 FTP 服务器。这个过程需要的时间越来越长。
鉴于我的问题,萎缩有那么糟糕吗?我将重建我所有的索引。我做了一次试运行,并将我的数据库降低到 6GB。
这家伙(谁我一直信任我的SQL大师)表示,它的坏.... mkay “SQL SERVER -收缩数据库是坏的-提高了碎裂-降低性能”
我们有几个表的问题,这些表非常大,会减慢系统速度。所以我的问题是,对于表中的行数来说,这个大小是否正常,以及可以做些什么来使它更小更轻,它不应该减慢一切。


CREATE TABLE [dbo].[TransactionEntry](
[TransactionEntryID] [uniqueidentifier] NOT NULL,
[TransactionID] [uniqueidentifier] NULL,
[ItemStoreID] [uniqueidentifier] NULL,
[Sort] [int] NULL,
[TransactionEntryType] [int] NOT NULL,
[Taxable] [bit] NULL,
[Qty] [decimal](19, 3) NULL,
[UOMPrice] [money] NULL,
[UOMType] [money] NULL,
[UOMQty] [decimal](19, 3) NULL,
[Total] [money] NULL,
[RegUnitPrice] [money] NULL,
[DiscountPerc] [decimal](19, 3) NULL,
[DiscountAmount] [money] NULL,
[SaleCode] [nvarchar](50) NULL,
[PriceExplanation] [nvarchar](50) NULL,
[ParentTransactionEntry] [uniqueidentifier] NULL,
[AVGCost] [money] NULL,
[Cost] [money] NULL,
[ReturnReason] [int] NULL,
[Note] [nvarchar](50) NULL,
[DepartmentID] [uniqueidentifier] NULL,
[DiscountOnTotal] [decimal](19, 3) NULL,
[Status] …Run Code Online (Sandbox Code Playgroud) 我正在运行 SQL Server 2008 Express 并且遇到了 4GB 大小的问题。在迁移到更大的数据库之前,我想腾出一些空间给我时间。
我不需要我的交易日志。那么,我可以删除我的日志以增加空间吗?
否则,我将不得不创建一个重复的数据库结构,然后将数据复制到新数据库中,然后从原始数据库中删除所有内容,以便我可以重新开始。
在这种情况下,是否有一种“简单的方法”可以将旧表中的数据复制到新表中?
在我的收藏中,我的文档似乎比较相似。我需要知道我的生产服务器需要多少存储空间来存储我的文档,这就是我查询的原因:
db.collectionName.stats()
Run Code Online (Sandbox Code Playgroud)
我的字段 avgObjSize 大约为 6442 字节。我在我的收藏中选择了一个随机文档,我输入:
Object.bsonsize(db.collectionName.find({"_id" : ObjectId("5508497c51a990da07b07106")}))
Run Code Online (Sandbox Code Playgroud)
我获得了 810 个字节。
为什么我有这么大的差异?
我还注意到,我存储的文档越多,avgObjSize 减少的越多……这正常吗?(我查过,我的文件不是空的。)
它是一个开发服务器,所以我使用的是 Red Hat Enterprise Linux 5.8,它是一个 32 位版本。
我在 SQL Server 2012 中有一个包含 460.000 行的表。
该表具有以下架构:

我们的应用程序有问题,所以所有 500.000 行都是Comments用空格填充的。
这导致表大小约为 3.7GB:

在此之后,我执行以下操作来修复结尾空格,但数据库保持在 3.7GB。
update voucher set comments = ltrim(rtrim(comments))
Run Code Online (Sandbox Code Playgroud)
一个快速计算显示,一个完全填充的行大约有 280 个字节的原始数据,一个空行(所有 varchars 为空)有 32 个字节。
这意味着对于 460.000 行,我的表应该在 32MB-122MB 之间。
为什么表是3.7GB?我怎样才能收回空间?
如何减少我的 SQL Server 2008 数据库大小?
由于 db 体积增加,我的应用程序很慢。
database-size ×10
sql-server ×6
oracle ×2
size ×2
alter-table ×1
auto-growth ×1
disk-space ×1
index ×1
mongodb ×1
oracle-10g ×1
oracle-11g ×1
restore ×1
shrink ×1
storage ×1
table ×1