私はWordPressサイトに保存しようとしています。それができるかどうかを確認するために100万件以上の投稿をチェックしています。インポートが結果を投稿1000000+した後、ウェブサイト、である:70ポスト(index.phpを)とアーカイブのメインクエリは約1,60秒投稿数100万回のWordPressで、それを最適化する方法
を必要と
ので、私は、クエリのデバッグを開始し、これが標準ですクエリ:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
ORDER BY wp_posts.post_date DESC
LIMIT 1035930, 70
私はチェックのためにこのクエリを操作し始めました。必要ORDER BY wp_posts.post_date DESC
ORDER BY ID
にクエリを渡すと
:私はこの後、私たちはこのトリックを持つ唯一の0,40秒
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' LIMIT 1035930, 70
を必要とし、このようなクエリをチェックして、私の要件とそれを最適化することができます1,20秒(0、40は第二獲得)
ORDER BY
クエリを削除する場合は、1秒(0,20は、第二獲得) を必要
私は0,40秒(0,60が第二稼いだ)
を必要ととても巨大条件は「post_status」必要はないで私のプロジェクトにpost_status
とORDER BY
あるAND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
クエリを削除する場合それを削除できますか?
ORDER BYでは、代わりにmysqlをPHPで置き換えることができますか?私はPHPをより速く、右を学んだか?
どのように私はまだこのクエリを改善することができますか?
その後、私は
add_filter ('posts_orderby', 'bm_featureHomeFilterOrder');
function bm_featureHomeFilterOrder ($order = '') {
global $wpdb;
$order = 'none';
return $order;
}
ではなく、「なし」と連携することにより削除順序のためにこのコードを使用しようとした最速の問合せ、例えば、メインクエリを置き換えることができますどのように、IDのような他の変数でのみ動作します-titleなど
pre_get_postを使用してネイティブmysqlクエリを使用して削除できますか?
のように:
- PHP 7 FPM
- madiadb
- memcachedの(データベースキャッシュとオブジェクトキャッシュ)
- APC :
$query = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM $wpdb -> wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
LIMIT 12080, 70");
ウェブサイトがこの構成でホストされています
この設定はeasyengineスクリプトによって行われます。
使用中のテーマは、index.phpページ
(画像のみ+タイトルを紹介)されたアーカイブで検索したデータのためのより多くの情報のためのコードスターターテーマhttps://underscores.me/チェックです。
シングルポストで取得されたデータは(タイトル、カテゴリ、コンテンツ、25関連の投稿)です。
クエリの日付によるソートには時間がかかり、並べ替えを行わず、ランダムな行を70個だけ戻して最適化します。はい、元のクエリとは関係ないこのような最適化がさらにあります。 – Solarflare