1

getItems()モデル内の関数が、クエリを実行する前にグローバルに設定された LIMIT を自動的に追加するかどうかを誰かに教えてもらえますか(からgetListQuery())。Joomla は非常に苦労しており、結果全体をキャッシュしようとしているようです (ここでは 100 万件を超えるレコードです!)。

/libraries/legacy/model/list.php/libraries/legacy/model/legacy.phpを調べたところ、結果をキャッシュに送信する前getItems()に setQuery に LIMIT を追加しているように見えます$this->getState('list.limit')が、その場合はなぜJoomlaはとても苦労しています。

どうしたの?なぜ phpMyAdmin は限られた結果を 1 秒以内に返すことができ、Joomla はタイムアウトになるのでしょうか?

どうもありがとう!

4

2 に答える 2

2

100 万件のレコードがある場合は、Riccardo が提案するように、モデルをオーバーライドして最適化することを最も確実に望んでいるでしょう。

JModelList はクエリを 2 回実行します。1 回はページネーション番号に対して、次に表示クエリ自体に対して実行されます。ページネーション クエリを回避するには、 JModellistから慎重に継承する必要があります。

また、articles クエリは結合で有名です。その速度低下の一部を確実に失う可能性があります (たとえば、連絡先リンクを使用しているとは思えません)。

すべての記事が公開されている場合は、ACL チェックを削除できますが、これにはかなりのコストがかかります。

これらの GROUP BYがすべて必要な理由を説明できる西側または東側の DBA もいません。

それらのものを失うことはかなり役に立ちます。実際、最初からクエリを作成するのが最善の方法かもしれません。

于 2013-07-07T23:29:27.587 に答える