Paginierung für große database beschleunigen

Wir haben eine WordPress mit 1 Million Produkt Post und 15000 Seitenumbruch Seite auf Archiv, wir haben alle Website mit guter performance optimiert, aber wir haben festgestellt, die Paginierung des Archivs ist langsam auf WordPress, ein Beispiel für die Abfrage, die ich auf Archivseite habe so was:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'prod_bb' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY ID LIMIT 1043000, 70 

Diese Abfrage ist nicht optimiert, um zu extrapolieren 70 Post macht eine ganze database scannen, Nach einigen Recherchen fanden wir einen interessanten Artikel auf wordpress.com, wie es verwaltet Seitenumbruch ist

aber versuche einige Tests zu machen Ich kann den Code nicht ausführen, das ist der Testcode, den ich implementiert habe:

 get_results( $wpdb->prepare( "SELECT wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'prod_bb' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND wp_posts.ID > %d LIMIT 70;", $last_id // Use the last ID to start after ) ); foreach ( $blogs as $blog ) { // Do your thing! // get_template_part( 'template-parts/content-index', get_post_format() ); // ... // Record the last ID for the next loop $last_id = $blog->wp_posts.ID; } // Do it until we have no more records } while ( ! empty( $blogs ) ); ?> 

mit diesem code ist die cpu meines servers zu 100%, es bleibt im laden ohne etwas zu zeigen

Solutions Collecting From Web of "Paginierung für große database beschleunigen"

Der Artikel auf WordPress ist interessant und wahr, aber ich bin mir nicht sicher, was es ist. Der bereitgestellte Code ist für Fälle gedacht, in denen Sie für jeden Beitrag etwas unternehmen möchten; Es hilft nicht direkt bei der Paginierung vor Ort.

Sie können stattdessen versuchen https://wpartisan.me/tutorials/wordpress-database-queries-speed-sql_calc_found_rows , aber mit Millionen Posts, noch besser wäre es, Ihre Paginierung vollständig zu überdenken; der “LIMIT 1043000, 70” ist ein sehr ineffizienter Teil.