1

Тема: Економія данних на запитах MySQL

Як краще використовувати запити, все й одразу, чи кілька разів, але лише потрібну інформацію?

Все й одразу:

Прихований текст
    $course_data = mysql_query("SELECT * FROM courses WHERE id='$course_id'",$db);
    $course_data_array = mysql_fetch_array($course_data);

    echo "Вибірка окремого курсу[TEST]</br>";

    if ($course_data_array == false) {     //Якщо не знайдено - повідом про це
        echo ("<p>За данним запитом не знайдено курсу!</p>");
    }
    else {
            if ($course_data_array["banned"] == '1') {     //Данні з заблокованих курсів не виводятся
                echo("<p>Данний курс заблокований за порушення правил сервісу.</p>");
            }

Другий варіант:

Прихований текст
    $course_data = mysql_query("SELECT banned FROM courses WHERE id='$course_id'",$db);
    $course_data_array = mysql_fetch_array($course_data);

    echo "Вибірка окремого курсу[TEST]</br>";

    if ($course_data_array == false) {     //Якщо не знайдено - повідом про це
        echo ("<p>За данним запитом не знайдено курсу!</p>");
    }
    else {
            if ($course_data_array["banned"] == '1') {     //Данні з заблокованих курсів не виводятся
                echo("<p>Данний курс заблокований за порушення правил сервісу.</p>");
            }
            else {                                                      //Виводим данні з окремого курсу
                $course_data = mysql_query("SELECT * FROM courses WHERE id='$course_id'");

2

Re: Економія данних на запитах MySQL

Виходить так, що якщо $course_data_array["banned"] == '1' (користувач заблокований), інші дані не потрібні.

3

Re: Економія данних на запитах MySQL

Cannoneer написав:

Виходить так, що якщо $course_data_array["banned"] == '1' (користувач заблокований), інші дані не потрібні.

Логічно. ось тут і економія на додатковому запиті в конкретній ситуації.

Подякували: Cannoneer1

4

Re: Економія данних на запитах MySQL

Оу, дякую

5

Re: Економія данних на запитах MySQL

1. порахуйте приблизну кількість людей які будуть заходити на забанені курси.
2. Кількість забанених курсів. якщо їх для прикладу 100 ви можете тримати ці ID у кеші (навіть у одному файлі)
3. Юзайте PDO =)

6 Востаннє редагувалося Sensetivity (09.10.2016 09:28:11)

Re: Економія данних на запитах MySQL

*Ліричний всптуп*
При вибірці одного стовпця фільтрація відбувається на рівні бд. Тобто вибираємо все, потім фільтруємо, віддаємо на php. Тому в ORM ларавелу в принципі немає можливості зробити селект окремого стовпчика.

У другому варіанті у вас якщо курс існує, то виконається 2 запити. А в першому 1 запит. Хоча в кінці результат той самий. Для чого платити більше?

PS. Візьміть собі якийсь PDO wrapper.
Наприклад: https://github.com/karlpatrickespiritu/ … do-wrapper

Це справді економить час.

7

Re: Економія данних на запитах MySQL

При виборі одного рядку даних немає великого значення чи робити один, чи два запити... Це може впливате суттєво, коли отримуєш певний набір даних, а тем вже багато чого залежить від конкретних умов і обставин. Раніше я завжди намагався отримати максимум одним запитом, а потім я побачив, що це не завжди найкращий вихід.