これが私のクエリです:
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 で実行すると 78 ミリ秒以内に結果が返されますが、.Net sqlite 環境内からは 1400 ミリ秒近くかかります。
助言がありますか?
このクエリは、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;
}