我将软件数据库从MS Access更改为SQL Server CE。我无法使用其他数据库,因为我没有客户端的(管理员)权限来安装。
我根据需要索引了几列。我很困惑在SQL Server CE中查找数据,因为有几种方法可以做到这一点。我可以使用SqlCeResultSet
,SqlCeDataReader
和其他方法来查找数据。
使用了哪一个以及当它被使用时,因为SqlCeResultSet
提供了多个ResultSetOptions
。我有ID是表Users
中的主键,通常使用3种类型的查询:
选择具有以下条件的几列:
SELECT Id, email, mobile
FROM Users
WHERE Users.Tmpid = 3
AND connected = 1;
使用主键选择多个字段:
SELECT email, mobile, address
FROM Users
WHERE Id = 10;
没有条件:
SELECT Max(TmpId)
FROM Users;
我很困惑哪一个用的时候。哪一个提供了在SQL Server CE中查找数据的最快方法?
答案 0 :(得分:1)
你应该使用索引,然后使用TableDirect API,如下面的示例代码,在我的非正式测量中,它的速度提高了大约30%。
public CacheElement FindElementByKey(Guid key)
{
using (var command = _connection.CreateCommand())
{
command.CommandType = CommandType.TableDirect;
command.CommandText = "CacheElement";
command.IndexName = "PK_CacheElement";
using (var reader = command.ExecuteReader())
{
reader.Seek(DbSeekOptions.FirstEqual, key);
if (reader.Read())
{
var element = new CacheElement();
element.Key = key;
element.Tag = reader.GetValue(1) == DBNull.Value ? null : reader.GetString(1);
element.Value = (byte[])reader.GetValue(2);
element.CreatedAt = reader.GetDateTime(3);
element.ExpirationAt = reader.GetDateTime(4);
return element;
}
}
return null;
}
}
有关示例和更多信息,请参阅我的博客文章:http://erikej.blogspot.dk/2015/07/sql-server-compact-adonet-data-access.html