这是我的查询语句:
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<string, object> 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;
}
CallSqlReader()
中SqlStatement
参数所传递的查询语句。不用担心,我们不会窃取你的工业机密。同时,我们想要看到你的表格的确切定义(CREATE TABLE
),或许还想了解该表格包含多少行数据。 - Mike Nakis