私たちは本当に私たちのサーバーを動かすようになっているCakePHPクエリを持っています。問題は、膨大な数のレコードが返され、改ページされることです。ユーザーがページングの最後に行くと(たとえば60,000ページ)、クエリには膨大な時間がかかり、CPU使用率が高くなります。あきらめる前に、ページングレコードの数を制限する前に、少なくともクエリをより効率的にするようにしたいと考えています。CakePHP:late row lookup
問題は後で行が検索され、解決策が存在することがわかっています(たとえば、https://explainextended.com/2011/02/11/late-row-lookups-innodb/)。標準的なCakePHPクエリを私たちを助けるものに移動するのは苦労しています。
これが私たちのケーキのクエリです:
$pagination = array(
'Sentence' => array(
'fields' => $fields,
'contain' => $contain,
'conditions' => array(
'text' => $text,
),
'limit' => CurrentUser::getSetting('per_page'),
'order' => "Sentence.id desc"
)
);
$が含まれているが、深い1層以上あるうちの2つは、いくつかの関係を、持っている:
Array
(
[Favorites_users] => Array
(
[fields] => Array
(
)
)
[User] => Array
(
[fields] => Array
(
[0] => id
[1] => username
[2] => group_id
[3] => level
)
)
[SentencesList] => Array
(
[fields] => Array
(
[0] => id
)
)
[Transcription] => Array
(
[User] => Array
(
[fields] => Array
(
[0] => username
)
)
)
[Translation] => Array
(
[Transcription] => Array
(
[User] => Array
(
[fields] => Array
(
[0] => username
)
)
)
)
)
私たちは、これで基本文のテーブルの情報を取得することができます生のクエリ:
SELECT {$lFields}
FROM (
SELECT {$fields}
FROM sentences AS Sentence
ORDER BY
id DESC
LIMIT 10
) q
JOIN sentences l
ON l.id = q.id
ORDER BY
q.id DESC
ただし、これは関係のいずれも得られず、Cakeは実際には同意しません出力形式で出力します。
だから、ケーキに遅い行のルックアップ時間を最小限にするクエリを出すことは可能ですか?
正確なCakePHPのバージョンを必ずご記入ください!異なるバージョンの問題では、さまざまな方法で問題を解決できます。 – ndm
ああ、申し訳ありません。そのレガシー1.3ケーキアプリ。ええ、私は知っている..... –