3

これが私のクエリです:

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;
}
4

1 に答える 1

0

データベースにアクセスする非ネイティブな手段は、同じデータベースにアクセスするネイティブな手段よりも遅く、おそらくはるかに遅くなることが予想されます。しかし、以前にこの問題を抱えていて、何らかの解決策を思いついた人が現れるかどうかを確認してください. それまでの間、dotnet 内からこのクエリを実行する方法を正確に示していただければ、おそらく役に立ちます。

于 2012-01-08T12:32:31.653 に答える