2016-11-14 8 views
1

У нас есть запрос CakePHP, который действительно начинает пугать наш сервер. Проблема в том, что огромное количество записей возвращается и разбивается на страницы. Если пользователь подходит к концу разбивки на страницы (например, стр. 60 000), запросы занимают огромное количество времени, а наши ракетные ракеты с процессором. Прежде чем мы откажемся и закроем количество записей разбиения на страницы, мы хотели бы хотя бы попытаться сделать наш запрос более эффективным.CakePHP: поиск в конце строки

Мы знаем, что проблема связана с поздним поиском строк, и мы знаем, что существуют решения (например, это 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" 
    ) 
); 

$ содержат несколько отношений, два из которых более чем один слой глубокий:

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 действительно не согласен с выходным форматом.

Итак, можно ли получить Cake для запроса, который минимизирует время поиска в конце строки?

+0

Всегда упоминайте свою точную версию CakePHP! В разных версиях проблемы могут быть решены по-разному. – ndm

+0

А, простите об этом. Это приложение 1.3 для тортов. Да, знаю..... –

ответ

0

Разбиение страницы по OFFSET является болезненно медленным. Выясните, как «запомнить, где вы остановились». More discussion.

 Смежные вопросы

  • Нет связанных вопросов^_^