Один запрос MySQL один ко многим эффективности


Я довольно неопытный с последствия одного выбора, где объединить несколько таблиц и несколько один-ко-многим отношений, а также некоторые встроенные функции MySQL, используя значения столбцов между таблицами.

Таблицы будут достаточно большие: 10 000 записей в учетные таблицы, 70,0000 записей в местах стол, 350,000 в email_sequences таблице.

Выбор я играю: (с помощью построителя запросов фреймворк Laravel)и

$interval = $getSheduleInterval($current);

$sql = "SELECT seq.id FROM locations AS loc
        JOIN accounts as acc ON acc.id=loc.account_id
        JOIN email_sequence AS seq ON loc.id=seq.location_id
        WHERE acc.suspended = 0
        AND acc.deleted_at IS NULL
        AND loc.active = 1 
        AND seq.immediate = 0
        AND TIME(CONVERT_TZ(seq.schedule_time, 'UTC', loc.timezone)) >= {$interval->start}
        AND TIME(CONVERT_TZ(seq.schedule_time, 'UTC', loc.timezone)) < {$interval->end}";

$sequents = DB::select($sql);

Я видел (читал), где в некоторых случаях он более эффективен для выполнения нескольких запросов и обработки результатов каждого в Между, а не сложный запрос SELECT, где несколько один-ко-многим или многие-к-одному отношения.

Будут ли в каких-либо серьезных проблем с этим один выбор, который у меня сейчас строиться?

Редактировать: как и просили вот $getScheduleInterval (код);

// @param  object [Takes a instance of Carbon::now()] 
public function getScheduleInterval($carbonObj){
    $interval = (object)[];

    // round time down to quarter hour
    $carbonObj->minute = $carbonObj->minute - ($carbonObj->minute % 15);
    $carbonObj->second = 00;

    //set start / end
    $interval->start = "'{$carbonObj->toTimeString()}'";
    $interval->end =   "'{$carbonObj->addMinutes(15)->toTimeString()}'";

    return $interval;

}


315
2
задан 25 января 2018 в 01:01 Источник Поделиться
Комментарии
1 ответ


Я видел (читал), где в некоторых случаях он более эффективен для выполнения нескольких запросов и обработки результатов каждого в Между, а не сложный запрос SELECT, где несколько один-ко-многим или многие-к-одному отношения.

Это значит, что выполняется запрос для выбора данных из каждой таблицы, а затем последующие запросы для выбора зависимых данных? Если это так, повторить (избыточные) запросы (т. е. на одном столе, где только WHERE состояние изменений) может привести к снижению производительности. Но, если связанные с ним данные могут быть общими для всех записей (например, несколько учетных записей имеют одинаковое расположение), то это может быть лучше иметь один запрос в таблицу, а затем искать записи в различные наборы результатов, когда это необходимо.

Если подкачки может быть интегрирована, например: заполнение первой \ФП\$ результаты, где \N $\$ может быть 20, 40, 60 и т. д. затем запрос с соединяемых таблиц может быть оптимальным.


Будут ли в каких-либо серьезных проблем с этим один выбор, который у меня сейчас строиться?

Запрос, как выше, вероятно, могут занять некоторое время, учитывая большое количество записей в каждой таблице. Но как упоминалось выше, пейджинг, вероятно, существенно улучшит ситуацию.

1
ответ дан 26 января 2018 в 06:01 Источник Поделиться