Ik loop tegen iets aan en dat is het volgende.
In wc-term-functions.php van WP Woocommerce staat een query zoals hieronder. Deze query vertraagd de boel enorm en doet er gemiddeld 1 a 2 seconden over een resultaat te geven. probleem is dat deze continu door het systeem wordt aangeroepen dus de boel loopt vol met locks. Er zijn bijna 40.000 producten en meer dan 1.4 miljoen records in wp_postmeta. De server die ik heb is sterk zat en heeft 4x CPU met 16gb dus dat wil wel.
De query
// Main query
$count_query = "
SELECT COUNT( DISTINCT posts.ID ) FROM {$wpdb->posts} as posts
LEFT JOIN {$wpdb->postmeta} AS meta_visibility ON posts.ID = meta_visibility.post_id
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID=rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )
LEFT JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id
$stock_join
WHERE post_status = 'publish'
AND post_type = 'product'
AND meta_visibility.meta_key = '_visibility'
AND meta_visibility.meta_value IN ( 'visible', 'catalog' )
$stock_query
";
De volgende url komt er bijvoorbeeld uit:
SELECT COUNT( DISTINCT posts.ID ) FROM wp_posts as posts
LEFT JOIN wp_postmeta AS meta_visibility ON posts.ID = meta_visibility.post_id
LEFT JOIN wp_term_relationships AS rel ON posts.ID=rel.object_ID
LEFT JOIN wp_term_taxonomy AS tax USING( term_taxonomy_id )
LEFT JOIN wp_terms AS term USING( term_id )
LEFT JOIN wp_postmeta AS postmeta ON posts.ID = postmeta.post_id
WHERE post_status = 'publish' AND post_type = 'product'
AND meta_visibility.meta_key = '_visibility' AND meta_visibility.meta_value IN ( 'visible', 'catalog' )
AND term_id IN ( 2735 );
Explain:
id
select_type
table
type
possible_keys
key
key_len
ref
rows
Extra
1
SIMPLE
tax
ref
PRIMARY,term_id_taxonomy
term_id_taxonomy
8
const
1
Using index
1
SIMPLE
rel
ref
PRIMARY,term_taxonomy_id
term_taxonomy_id
8
ietsdoen_wp.tax.term_taxonomy_id
60
Using index
1
SIMPLE
posts
eq_ref
PRIMARY,wp_posts_idx1,type_status_date
PRIMARY
8
ietsdoen_wp.rel.object_id
1
Using where
1
SIMPLE
meta_visibility
ref
post_id,meta_key,wp_postmeta_idx1,wp_postmeta_idx2
post_id
8
ietsdoen_wp.rel.object_id
7
Using where
1
SIMPLE
postmeta
ref
post_id
post_id
8
ietsdoen_wp.rel.object_id
7
Using index
Heeft iemand een tip om het misschien anders te doen waardoor het sneller kan. Ik las iets over een group by toevoegen maar snap ik niet helemaal.
gr, Rik