Поддержка Проблемы и решения Вывод записей с базы по произвольным полям (очень долго)

  • Добрый день. После последнего обновления WordPress (5.0.2–ru_RU) очень тяжело выводятся записи с базы данных по произвольным полям.

    В базе 60 000 записей и мы сделали фильтр по дополнительным полям и если фильтровать по какому либо из дополнительных полей происходит значительная нагрузка на БАЗУ ДАННЫХ. Загружается по 20-30 секунд и после чего может выдать ошибку вот такую:
    «…Query execution was interrupted in….»

    До обновления тоже не сразу выводилось, но не так как сейчас. Скажите пожалуйста как это возможно исправить ?

    Выводим записи с помощью WP_Query

    Вот допустим выводим записи по произвольному полю ДАТА:

        $args['meta_query'][] = array(
            array(
                'key'     => 'date',
                'compare' => '=',
                'value'   => date( 'Y-m-d H:i:s', strtotime( $_GET['start'] ) ),
                'type'    => 'DATETIME'
            ),
            array(
                'key'     => 'date',
                'compare' => '=',
                'value'   => date( 'Y-m-d H:i:s', strtotime( $_GET['end'] ) ),
                'type'    => 'DATETIME'
            )
        );
Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Попробуйте изменить запрос на

    $start = date( 'Y-m-d H:i:s', strtotime( $_GET['start'] ) );
    $end = date( 'Y-m-d H:i:s', strtotime( $_GET['end'] ) );
    
    array(
    'key' => 'date',
    'value' => array($start,$end),
    'type' => 'DATETIME',
    'compare' => 'BETWEEN'
    )

    Так не выводит вообще записи. Вот еще скрипт который так же очень долго обрабатывается:

     $args['meta_query'] = array(
            array(
                'key'     => 'phone',
                'value'   => $_GET['phone'],
                'compare' => 'LIKE'
            )
        );

    Может есть какие либо способы оптимизировать или увеличить скорость выборки данных из БД

    Очет медленно работает даже вот этот скрипт:

    $args['s'] = $_GET['fio'];
    $query = new WP_Query($args);

    Вот ошибка которая периодически вылазит:

    Warning: mysqli_query(): (70100/1317): Query execution was interrupted in /var/www/vhosts/u0083358.plsk.regruhosting.ru/agent.bustrip.pro/wp-includes/wp-db.php on line 1924

    • Ответ изменён 5 лет, 3 месяца назад пользователем globustravel.
    • Ответ изменён 5 лет, 3 месяца назад пользователем globustravel.
    Модератор Yuri

    (@yube)

    Вот еще скрипт который так же очень долго обрабатывается:

    Попробуйте создать в таблице postmeta индекс по полю meta_value.

    Попробуйте создать в таблице postmeta индекс по полю meta_value.

    В том то и дело, что это не поможет. Это минусы гибкости структуры базы, которую предоставляет WP. Поэтому для затратных операций необходимо использовать кастомные таблицы.

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Вывод записей с базы по произвольным полям (очень долго)» закрыта для новых ответов.