1

この形式の複雑なクラス階層があります。

- A (common ancestor)
    * B
    - C
        * D
        * E
    * F
    - G
        * H
        * I

私のアプリケーションから、この種のクエリが必要です:

SELECT FROM D
WHERE ...

しかし最近、この種のクエリも実行したいと思います。

SELECT FROM A
WHERE @class IN ['D', 'I'] AND ...

私の質問は、この最後のクエリがどれだけ効率的で、最適化するためのベスト プラクティスはどれかということです。

4

2 に答える 2

2

私が作成したサンプル データセットでクエリを試す

SELECT FROM A
WHERE @class IN ['D', 'I']

実行時間は 40 ミリ秒 (コールド キャッシュ) から 15 ミリ秒 (ホット キャッシュ) です。

代わりにこれを使用すると、改善が見られます (ホット キャッシュで 3 ミリ秒)。

select expand($c)

let $a=(SELECT FROM D),
$b=(SELECT FROM I),
$c=unionAll($a,$b)

編集

WHERE 条件と LIMIT 条件を使用したクエリは次のとおりです。

select from (
  select expand($c)

  let $a=(SELECT FROM D),
  $b=(SELECT FROM I),
  $c=unionAll($a,$b)
  )
where value = 5 LIMIT 10

それが役に立てば幸い。イヴァン

于 2016-03-09T16:56:52.547 に答える