[英]optimize insert query on sql server 2008
我最近構建了一個應用程序,用於測試將100000行寫入文本文件和將100000個插入到數據庫之間的速度差異
這是代碼的核心
private void RunTestBtn_Click(object sender, RoutedEventArgs e)
{
Stopwatch FFtimer = new Stopwatch();
FFtimer.Start();
RunFFTest();
FFtimer.Stop();
TimeSpan FFts = FFtimer.Elapsed;
string FFelapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
FFts.Hours, FFts.Minutes, FFts.Seconds,
FFts.Milliseconds / 10);
FFLabel.Content = "Flat File: " + FFelapsedTime;
Stopwatch Datatimer = new Stopwatch();
Datatimer.Start();
DataFFTest();
Datatimer.Stop();
TimeSpan Datats = Datatimer.Elapsed;
string DataelapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
Datats.Hours, Datats.Minutes, Datats.Seconds,
Datats.Milliseconds / 10);
DBLabel.Content = "Database: " + DataelapsedTime;
}
void RunFFTest()
{
using(StreamWriter writer = new StreamWriter(@"F:\test\FFtest.txt"))
{
for(int i = 0; i< 100000; i++)
{
writer.WriteLine("test");
}
}
}
void DataFFTest()
{
using (SqlConnection conn = new SqlConnection("Data Source=EMMY;Initial Catalog=MyDB;User Id=SqlServiceUser;Password=MyPassword;"))
{
conn.Open();
for (int i = 0; i < 100000; i++)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO TestTable VALUES ('Test')";
cmd.ExecuteNonQuery();
}
}
}
}
最終結果是平面文件寫入花了1毫秒,sql插件花了9分41秒。 我知道數據庫需要更長的時間,但有沒有辦法加快速度呢?
可能的選擇......
使用事務(每個事務執行多次插入)
使用SqlBulkCopy API
是的,將它作為一個單獨的插入語句,而不是許多。
INSERT INTO TestTable VALUES ('Test'), ('Test'), ('Test') ....";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.