1

目的に合った適切な SQL クエリを見つけた後、クエリが遅いことに気付きました。

WITH temp_table (t_col_1, t_col_2, t_col_3) AS
(
    SELECT col_1 AS t_col_1, col_2 AS t_col_2, col_3 AS t_col_3
    FROM actual_table
    WHERE ID = 100 AND PID = 1245
)
SELECT t_col_1, t_col_2, t_col_3 
FROM temp_table AS t1 
WHERE t1.t_col_2 BETWEEN 1 AND 12541
  AND t1.t_col_1 = (SELECT max(t2.t_col_1)
                    FROM temp_table AS t2
                    WHERE t2.t_col_1 < 15147
                      AND t2.t_col_2 = t1.t_col_2) 
ORDER BY t1.t_col_2

この形式でクエリを使用する理由は次のとおりです。

  1. SQL クエリが生成され、Matlab 内でデータを取得するために使用されます。
  2. ID によっては、列 col_1 と col_2 が入れ替わることがあり、これが t_col_1 = col_2 と t_col_2 = col_1 の理由です。この場合、Matlab スクリプトは col_1 AS t_col_2 と col_2 AS t_col_1 を置き換えます。

クエリを高速化するエレガントな方法はありますか?

前もって感謝します。

4

2 に答える 2

0

答えは、クエリ オプティマイザとデータベース統計に完全に依存します。これは、選択したデータベースによって異なります。

  1. QEP の取得 - クエリ実行計画
  2. 計画が遅れている場所を確認する
  3. クエリを最適化したり、データベース統計を追加したり、必要なインデックスを追加したりします

クエリを調整してみて、うまくいくかもしれませんが、適切なアプローチはクエリ プランを理解することです。

たとえば、'max' が遅いかどうか、または actual_table に ID と PID のインデックスがない 10 億の行があるかどうかを知る方法はありません。

于 2016-08-27T05:01:49.913 に答える