我正在运行一个本地Server服务器,我正在做一个大约1500行的插入查询,这花费了如此长的时间,我真的很惊讶。我已经在这里搜索和搜索了很多想法和解决方案,但仍然发现它是缓慢的方式,我是说它的1500行!
我的问题是,有没有其他方法来插入这个数额?是否真的有太多行不能插入,所以我需要从csv文件中加载它?
My computer是Win7 32位,4GB内存,Core2Duo 1.86GHZ Server版本10.50.1617
优先查询
USE CustomerDB;
IF OBJECT_ID('Customer', 'U') IS NOT NULL
DROP TABLE Customer;
CREATE TABLE Customer
(
CustomerID int PRIMARY KEY IDENTITY,
CustomerName nvarchar(16),
...about 130 more columns...
);
INSERT INTO Customer VALUES
('FirstCustomerName', ...),
...1500 more rows...
('LastCustomerName', ...)在超过10分钟之后,我仍然没有完成查询,因为这显然是错误的。
第二个查询:
USE CustomerDB;
IF OBJECT_ID('Customer', 'U') IS NOT NULL
DROP TABLE Customer;
CREATE TABLE Customer
(
CustomerID int PRIMARY KEY IDENTITY,
CustomerName nvarchar(16),
...about 130 more columns...
);
INSERT INTO Customer VALUES
('FirstCustomerName', ...);
INSERT INTO Customer VALUES
('SecondCustomerName', ...);
...1500 more ...
INSERT INTO Customer VALUES
('LastCustomerName', ...);好的,下降到6.5秒,好多了,但是对于1500行来说还是很慢的。
第三个查询:
USE CustomerDB;
IF OBJECT_ID('Customer', 'U') IS NOT NULL
DROP TABLE Customer;
begin transaction Insert;
CREATE TABLE Customer
(
CustomerID int PRIMARY KEY IDENTITY,
CustomerName nvarchar(16),
...about 130 more columns...
);
INSERT INTO Customer VALUES
('FirstCustomerName', ...);
INSERT INTO Customer VALUES
('SecondCustomerName', ...);
...1500 more ...
INSERT INTO Customer VALUES
('LastCustomerName', ...);
commit transaction Insert;好的,到4.5-5秒,更好,但还是有点慢,我认为
我不是DB/ Server专家,所以这是我自己来的时候,帮助是非常感谢的!
编辑:因为我不是专家,4.5秒对于运行1500行的普通pc来说是相当长的时间吗?
发布于 2011-11-11 23:57:43
这个插入是缓慢的,因为您每次添加1行,并且它是完全记录的。瓶颈不是写入数据,而是在日志中写入您正在做的事情。
删除逐行插入并插入带有表锁的集:
INSERT TABLENAME WITH(TABLOCK) (Column1,Column2,...)
SELECT 'Column1Row1Value','Column2Row1Value'...
UNION ALL
SELECT 'Column1Row2value','Column2Row2Value'...
UNION ALL
SELECT 'Column1Row3value','Column2Row3Value'...此外,查看最低日志记录事务的规则。
发布于 2011-11-11 20:16:21
与其执行单独的insert语句,您很可能希望这样做:
INSERT INTO Customer
SELECT 'FirstCustomerName', ...
UNION
SELECT '2ndCustomerName', ...
UNION
SELECT '3rdCustomerName', ...
...1500 more rows...这应该要快得多。
发布于 2014-11-26 08:24:02
根据我的理解,你的列数是有意义的。但你还是要检查以下几点对你有帮助。
请确认这些步骤,如果需要帮助,请回来.
就SQL :)而言,1500是一个非常小的数字。
https://stackoverflow.com/questions/8091894
复制相似问题