Ускорение запроса MySQL? - PullRequest
       2

Ускорение запроса MySQL?

0 голосов
/ 15 февраля 2012

Запрос использует cakephp для вызова базы данных, вот запрос:

find('all', array(
    'conditions' => array(          
    'OR' => array(
        'PdfFolder.is_global' => true,
        'PdfFoldersUser.user_id' => $this->Auth->user('id'))
    ),
    'recursive' => 0,
    'order' => array('PdfFolder.is_global DESC', 'PdfFolder.name')

Таблица pdffolder имеет около 2100, однако таблица отношений, которая содержит pdf_folder_id и user_id, содержит почти 30000 записей. Время от времени этот запрос может занять до 35 секунд. Я не настраивал код, и я не являюсь экспертом по базам данных, он просто упал на меня как на разработчика.

Похоже, идентификатор для каждой таблицы настроен как первичный ключ, как и все индексы, которые я вижу.

Спасибо за любой совет.

EDIT

Структура таблицы

Пользователи

| id (index) | role_id | username | password | email |

pdf_folders

| id (index) | name | date_created | is_global(bool) |

pdf_folders_users

| id (index) | folder_id | user_id (now an index) |

PDFs

| id (index) | parent_id | pdf_folder_id | ...more file information

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Начните с добавления индекса в поле user_id -

CREATE INDEX FK_user_id ON PdfFoldersUser (user_id)

Будет полезно, если вы разместите полную структуру таблицы для каждой из соответствующих таблиц.

1 голос
/ 18 мая 2012

@ patcouch22

чтобы увидеть ваш sql в представлении

<?php echo $this->element('sql_dump'); ?>

чтобы увидеть это в контроллере

$this->render('sql');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...