0

私はこのクエリを実行しています:

NSString *querySQL = [NSString stringWithFormat:@"
        SELECT DISTINCT P1.ID_RUTA_PARADAS
        FROM FastParadas AS P1
        WHERE P1.ID_ESTACION_INIT <= %d AND
            %d <= P1.ID_ESTACION_END
        INTERSECT
        SELECT DISTINCT P2.ID_RUTA_PARADAS
        FROM FastParadas AS P2
        WHERE P2.ID_ESTACION_INIT <= %d AND
            %d <= P2.ID_ESTACION_END",
    (int)estacionOrigen.ID_Estacion,(int)estacionOrigen.ID_Estacion,
    (int)estacionDestino.ID_Estacion,(int)estacionDestino.ID_Estacion];

そしてスピードアップしたい。いくつかのインデックスを作成してみましたが、改善されません。SQLite3 はインデックスをサポートしていますか?

データベースには 3900 行以上あり、このクエリは 1 秒以内に 1800 回以上繰り返さなければなりません。

4

3 に答える 3

2

データベースには 3900 行以上あり、このクエリは 1 秒以内に 1800 回以上繰り返さなければなりません。

いいえ。メモリ内のデータをスキャンする高度に最適化されたアルゴリズムを使用して、非常に巨大なメモリ帯域幅を備えたマシンの外では起こりません。

このような状況では、この種のクエリがまったく必要ないようにデータ モデルを設計することが重要です。3900 行以上は実際にはそれほど多くはありませんが、そのデータに対して 1800 以上のクエリを実行するのは大変なことです。

最善の策は、1 秒あたり 1800 以上のクエリを不要にするスキーマを追求することです。最悪の場合、1 秒あたり 1800 以上のクエリがプログレス バーなどの背後で実行されるようにアプリを設計することです。

于 2013-08-31T19:56:06.537 に答える