【发布时间】:2010-12-14 01:23:21
【问题描述】:
我们有一个大约有 20 列的表格,如下所示:
我们需要插入 1000 条记录,稍后选择也会产生大约 1000 条记录。
尝试以两种方式插入:
- parallel via parallel.For c# loop
- sql 适配器插入填充了 1000 条记录的整个数据集。
两种情况下的插入都需要 30 多秒。我们甚至尝试在干净的桌子上这样做。这怎么能加快速度?
[之前对于普通的 10 列表,我们通过 parallel.for 在大约 60 秒内完成了 200 万条记录插入。]
选择(从 SQL mgmt 工作室测试)返回 2000 条记录也需要 30 多秒,即使在干净的表中也是如此。
时间可变:
- mgmt studio 已经运行了很多天:17-30 秒
- 关闭并重新打开 - 第一个选择在 1 秒内返回。 - 第二次和随后选择大约 7-10 秒来检索所有行。
可变大小或上限固定大小对列VARCHAR(SIZE) 有很大影响吗?
[磁盘速度很好(RAID?不确定)并且专用于此数据库]
表架构:(无 PK)
varchar(50)
varchar(2)
smallint
varchar(2048)
int
int
varchar(2048)
varchar(MAX)
varchar(MAX)
varchar(MAX)
smallint
varchar(500)
varchar(500)
varchar(MAX)
smallint
smallint
bigint
bigint
bigint
varchar(2048)
smallint
varchar(MAX)
varchar(MAX)
varchar(2048)
datetime
索引:
索引在 varchar(50) 上,非唯一非聚集
SELECT 语句:
select *
from table
where varchar(50) = 'value1'
and varchar(2) = 'value2'
and smallint = 'value3'
组合是每个唯一的 varchar(50) 有 5 个唯一的 varchar(2) 条目,并且对于每个 varchar(2),还有 1-3 个 smallint 条目。
【问题讨论】:
-
在列上声明索引可能会对您有所帮助
-
在 30 秒内插入 1000 部蓝光电影很快,但 1000 条员工记录则不然。向我们展示您尝试的表结构、插入/选择语句,并让我们了解您在做什么。您显示的数字实际上没有意义。