【发布时间】:2012-04-10 11:41:31
【问题描述】:
我有一个表 tbl_ECR_ProductData 有近 92356143 行。每周将 100000 行导入此表。
该表有 16 列,其中 2 列构成主键,其余列的类型为 varchar。
我的问题是当我根据剩余的列值搜索表格时.. 它需要很长时间,将近 10 分钟。
我怎样才能最大限度地减少时间?请帮我解决这个问题。感谢您的帮助...提前致谢! 表结构如下
CREATE TABLE [tbl_ECR_ProductData](
[Serial Number] [varchar](255) NOT NULL,
[Act Number] [varchar](255) NULL,
[Act Date] [datetime] NULL,
[Act Location] [varchar](255) NOT NULL,
[Manufacturer] [varchar](255) NULL,
[ManufacturerPN] [varchar](255) NULL,
[Act Description] [varchar](255) NULL,
[Act PtNumber] [varchar](255) NULL,
[Act Code] [varchar](255) NULL,
[Act DateCode] [varchar](255) NULL,
[Pmrl] [varchar](255) NULL,
[Act ReceiveDate] [datetime] NULL,
[Act Channel] [varchar](255) NULL,
[Act Supplier] [varchar](255) NULL,
[ImportDate] [datetime] NULL
CONSTRAINT [PK_tbl_ECR_ProductData] PRIMARY KEY CLUSTERED
(
[Serial Number] ASC,
[Act Location] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
)
【问题讨论】:
-
1.在您需要搜索的列上设置索引 2. 如果您在表中存储历史信息(即,您不需要哪些值已被较新行取代的行)删除这些行或将它们移动到历史值表中。
-
在 SQL Server Management Studio 中运行查询时,打开“包括实际执行计划”。查看生成的执行计划以查看查询的哪些子部分花费的时间最长。寻找“嵌套循环”通常比索引扫描等花费更多的时间。尝试 1. 重写查询以避免需要很长时间的部分或 2. 设置索引将有助于长时间运行的部分的性能。
标签: sql sql-server sql-server-2000 sqlperformance