我创建了一个简单的表,插入了一千行数据,结果只插入了1000行,用了10秒。这是正常的插入速度吗?它似乎异常缓慢。这个问题的原因可能是什么?
创建表
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DB](
[CODE] [varchar](20) NOT NULL,
[DATE] [datetime2](7) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[DB] ADD CONSTRAINT [DF_DB_DATE] DEFAULT (getdate()) FOR [DATE]
GO
插入数据
private void button1_Click(object sender, EventArgs e)
{
for (int i = 1000; i < 2000; i++)
{
string query = $"INSERT INTO dbo.DB(CODE) VALUES('CHOCO{i}')";
SqlExecuteNonQuery(query);
}
}
private bool SqlExecuteNonQuery(string query)
{
try
{
if (conn.State == ConnectionState.Closed)
conn.Open();
using (SqlCommand cmd = new SqlCommand(query, conn))
{
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
return false;
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
return true;
}
一行一行插入,慢是正常的。最好将数据传递给 SQL Server 存储过程,如 XML、JSON 或类似 CSV 的格式。然后解析这些数据并将其放入临时表,如果需要执行一些验证然后立即插入数据:
INSERT INTO table
SELECT *
FROM #table