Должен ли я передать в запрос Select SQL полное условие, что я хочу отфильтровать результаты на его основе, или просто получить данные и отфильтровать их в php? - PullRequest
1 голос
/ 19 октября 2019

Этот вопрос больше связан со скоростью и ускорением работы веб-сайта путем выбора полезной и более быстрой вещи для него.

Итак, я должен выполнить фильтрацию в php после выбора данных избаза данных на основе уникального идентификатора, такого как ID или что-то вроде ниже

$select_data_from_database = $conn->prepare("SELECT * FROM forchecking WHERE id = :id");
$select_data_from_database->execute(
    array(
        ":id" => $id
    )
);
$results = $select_data_from_database->fetch();
if ($results) {
    $now = time();
    if ($results['reviewingStart'] == null || $now >= $results['reviewingStart']) {
        // Some code
    } else {
        // Some other code
    }
}

Или я должен просто передать условия самому запросу SQL Select и позволить ему выполнить фильтрацию для меня, как это

$select_data_from_database = $conn->prepare("SELECT * FROM forchecking WHERE id = :id AND ( reviewingStart IS NULL OR reviewingStart <= :now)");
$select_data_from_database->execute(
    array(
        ":id" => $id,
        ":now" => time()
    )
);
$results = $select_data_from_database->fetch();
if ($results) {
    // Some code
} else {
    // Some other code
}

Я спрашиваю о том, что лучше сделать, чтобы повысить производительность.

1 Ответ

0 голосов
/ 19 октября 2019

В общем случае вы должны передать условия фильтрации в базу данных. Есть две очень важные причины:

  • Фильтрация уменьшает количество строк, возвращаемых базой данных, что повышает производительность.
  • Запрос SQL может быть оптимизирован для возврата нужных строк,Одна общая оптимизация - это использование индексов для прямого поиска значений, но есть и другие.

В вашем конкретном случае это не имеет большого значения. Если id уникален, то будет возвращено не более одной строки. Как правило, существует небольшая разница между возвратом одной строки и отсутствием строк. И, если id является первичным ключом, этот индекс все равно будет использоваться для извлечения строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...