SQLite:.Net比本机慢得多?
这是我的查询:
SELECT * FROM [GeoName] WHERE ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long)) < 0.005 ORDER BY ((-26.3665122100029-Lat)*(-26.3665122100029-Lat))+((27.5978928658078-Long)*(27.5978928658078-Long)) LIMIT 20
这将返回20个最近点。
在本机sqlite中运行它会在78ms内返回一个结果,但是在.Net sqlite环境中,它需要将近1400ms。
有什么建议?
我在我的ORM结构中使用参数化值进行此查询。 还尝试过将其作为原生文本查询。
运行查询的代码(在我的ORM层中):
private static IDataReader CallSqlReader(string SqlStatement, Dictionary parameters) { ConnectionCheck(); try { var cmd = conn.CreateCommand(); cmd.CommandText = SqlStatement; cmd.CommandType = CommandType.Text; foreach (var item in parameters) { cmd.Parameters.AddWithValue(item.Key, item.Value); } return cmd.ExecuteReader(); } catch { } return null; }
预计访问数据库的非本地方法比访问相同数据库的本机方式更慢,可能更慢。 但是等一下,看看有人出现之前有过这个问题的人,并且能够找到某种解决方案。 同时,如果您准确地显示如何从dotnet中执行此查询,它可能会有所帮助。