2016-07-08 23 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并产生比实际运行查询的执行计划。