2016-07-08 58 views
1

我有一個表PartNumbers,它有10列,混合數據類型和超過100,000行。SQL Server CE讀取速度慢(1000行是36秒?)

這裏是我的測試:

我已經提上了ID列的索引:

CREATE UNIQUE INDEX IndexName ON [PartNumbers] (ID) 

我得到隨機選擇的ID(Random_ID_List)和遍歷每個ID爲1000的列表,以獲取從表中描述:

Dim Stop_Watch As New Stopwatch 
    Stop_Watch.Start() 

    Dim Results As New List(Of String) 
    LocalDB.SQLCe_Connection.Open() 
    For Each ID As Integer In Random_ID_List 
    Dim sqlcmd = LocalDB.SQLCe_Connection.CreateCommand() 
    sqlcmd.CommandText = "SELECT Description FROM PartNumbers WHERE ID = " & ID 
    Results.Add(sqlcmd.ExecuteScalar) 
    Next 
    LocalDB.SQLCe_Connection.Close() 

    Stop_Watch.Stop() 
    Dim Result_Time As Long = Stop_Watch.ElapsedMilliseconds 

我的結果是:

  • Result_Time = 36283毫秒(36秒

這是正常的?

+1

每個查詢36ms。不可笑。嘗試使用預處理語句,和/或通過'in'而不是'='減少查詢次數。 – Blorgbeard

+2

嘗試'SELECT ID,描述FRO PartNumbers WHERE ID IN(...這裏的ID列表...)'您正在進行索引搜索1000次。 –

+0

@EricJ。這將它降低到2377毫秒,但這對我來說似乎仍然很慢......或者這是正常的嗎? –

回答

3

使用參數化查詢。

sqlcmd.CommandText = "SELECT Description FROM PartNumbers WHERE ID = @Param"; 
sqlcmd.Parameters.AddWithValue("@Param", ID); 

我不知道該數據庫的細節,但對於其他的數據庫,你可以花更多的時間解析SQL併產生比實際運行查詢的執行計劃。