Intereting Posts
В пользовательской странице – next_posts_link Не работает во время работы previous_posts_link Создавайте собственные постоянные ссылки на YouTube для нескольких пользовательских типов сообщений Как я могу показать много сообщений, которые есть у автора в неделю? Разрешить все атрибуты в тегах $ allowedposttags Страница таксономии показывает категорию в заголовке Как я могу получить W3 Total Cache для распознавания Amazon ElastiCache? В каком файле php перечислены все позиции категории (Разрешено) Как добавить кнопку подменю для переключения всех элементов «li», имеющих подменю? Как я могу запрашивать сообщения из нескольких ролей? Иерархические таксономии в permalink вызывают 404 для субтерминального архива Как центрировать div с помощью страницы шаблона admin_url в плагинах Меню навигации не назначено. Получение изображений из медиа-библиотеки и get_the_date () не работает wp_registered_widgets не содержит мои виджеты

wp_insert_post чрезвычайно медленный на большой таблице, прямой запрос очень быстро

Стол моих сообщений составляет около 600 тыс., И я не считаю это большим. В любом случае wp_insert_post становится очень медленным. Я пытаюсь импортировать огромный список информации о гостинице в Должности. Список около 1500K большой. Вставка сообщений начинается хорошо с 200-400 сообщений в секунду, но она резко падает до abp 20-10 сообщений в секунду, когда она достигает 400K сообщений.

Когда я делаю прямой запрос в таблице сообщений, он снова вставляет 400 сообщений в секунду. Поэтому я пришел к выводу, что wp_insert_post значительно замедляет работу.

Я попробовал некоторые «трюки», чтобы улучшить скорость wp_insert_post, например:

wp_defer_term_counting( false ); wp_defer_comment_counting( false ); $wpdb->query( 'SET autocommit = 0;' ); 

и после массового импорта:

 wp_defer_term_counting( true ); wp_defer_comment_counting( true ); $wpdb->query( 'SET autocommit = 1;' ); $wpdb->query( 'COMMIT;' ); 

но это не помогает улучшить скорость вставки, на самом деле улучшения нет.

Может кто-нибудь, пожалуйста, объясните мне, что «проверка» в функции wp_insert_post замедляет ее?

Это столбец «post_name» AKA slug? он должен быть уникальным, не так ли? Есть ли еще какие-то столбцы?

Я хотел бы знать, что проверено, или что НУЖНО проверяться, потому что я серьезно подумываю о переопределении функции wp_insert_post с моим собственным, чтобы ускорить процесс.

заранее спасибо

edit – добавлен мой цикл:

 foreach($hotels as $key => $hotel) { $slug = $hotel->HotelName; $title = $hotel->HotelName; if ($hotel->translation == NULL) { $description = $hotel->Overview; } else { $description = $hotel->translation; } $hotel_id = wp_insert_post( array( //'ID' => $hotel->id, 'post_mime_type' => $hotel->id, 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => $author_id, 'post_name' => $slug, 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'hotel', 'post_content' => $description, ) ); } 

Solutions Collecting From Web of "wp_insert_post чрезвычайно медленный на большой таблице, прямой запрос очень быстро"

Попробуйте изменить базу данных, чтобы улучшить скорость поиска поля post_name …

 ALTER TABLE `wp_posts` ADD INDEX (`post_name`); 

Вы хотите избежать записи собственной wp_insert_post() поскольку в неожиданных местах есть небольшие трюки, которые становятся настоящей головной болью для отладки позже.

вы должны отменить код, который вы должны добавить для импорта

 wp_defer_term_counting( true ); wp_defer_comment_counting( true ); 

не устанавливайте его ложным, и после импорта вы установите его true, вы должны сделать oppsite вещь
у меня была такая же проблема, чтобы вставить 50 сообщений, на которые ушло около 7 минут, после того, как я добавил этот код для wp_insert_post, потребовалось всего 7 секунд
и вы можете добавить это тоже

 define( 'WP_IMPORTING', true ); 

и после того, как вы импортировали сообщение, добавьте это и запустите скрипт

 wp_defer_term_counting( false ); wp_defer_comment_counting( false );