Как исправить ошибку «Тайм-аут» в большой базе данных, которая нашла второй последний измененный результат из объединенных таблиц? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть 3 пользователя MySQL Tables, плата и пин-код.пользовательские таблицы имеют около 66 столбцов.Таблица булавок имеет 89 столбцов, а таблица А - 12 столбцов.Таблица пользователей насчитывает почти 35000 пользователей, пин имеет 0,3 миллиона записей, а доски имеют 7 тысяч плат.Пользователь может иметь несколько плат, а доска может содержать несколько контактов.Мне нужна последняя измененная часть каждого пользователя, чтобы я мог отправить им письмо по электронной почте, если обновление не происходит в течение очень длительного периода времени.

Я попробовал следующий код на мгновение в codeigniter.

$this->db->select("t1.id as pin_id, t1.id, t1.user_id, `t1.title`,t1.image, t1.description, t1.profession_tag, t1.industry_tag, t1.collaborators, `t2.title` as board_title, t3.email, t3.username, t3.firstname");
        $this->db->from("pin as t1");
        $this->db->join('board as t2', 't1.board_id = t2.id', 'left');
        $this->db->join('user as t3', 't1.user_id = t3.id', 'left');
        $this->db->where('t3.status', 1);
        $this->db->where('t3.hidden_profile', 1);
        $this->db->where('t1.status', 1);
        $this->db->group_by('t1.user_id');
        $this->db->limit($limit, $start);
        $query = $this->db->get();
        return $query->result_array();

Но в случаях, когда у пользователя более 1000 пинов, это отнимает так много времени.Пожалуйста, предложите, какой отдых я могу сделать, чтобы улучшить его и получить результат быстрее.Я также не получаю последний измененный результат по запросу.Я не знаю, как это будет работать с предложением Have.

1 Ответ

0 голосов
/ 29 апреля 2019

Одно предложение ниже.Используйте подзапросы в операторе Join.См. Этот ответ от Trendfischer и Основное руководство по производной таблице MySQL

$this->db->select("t1.id as pin_id, t1.id, t1.user_id, `t1.title`,t1.image, t1.description, t1.profession_tag, t1.industry_tag, t1.collaborators, `t2.title` as board_title, t3.email, t3.username, t3.firstname");
$this->db->from("pin as t1");
$this->db->join('(SELECT id, title FROM board) AS t2', 't1.board_id = t2.id', 'left');
$this->db->join('(SELECT id, email, username, firstname FROM user status = 1 AND hidden_profile = 1) AS t3', 't1.user_id = t3.id', 'left');
$this->db->where('t1.status', 1);
$this->db->group_by('t1.user_id');
$this->db->limit($limit, $start);
$query = $this->db->get();
return $query->result_array();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...