sql >> Database teknologi >  >> RDS >> Mysql

MySQL. WordPress. Langsom forespørgsel ved brug af IN-sætninger

"Løsningen" jeg er snublet over for nu er ret grim, men af ​​en eller anden uforklarlig grund virker den. Tilføjelse af STRAIGHT_JOIN Optimizer-tip sænkede eksekveringstiden fra 18+ sekunder til cirka 0,0022 sekunder. Baseret på sund fornuft og dette spørgsmål (Hvornår skal STRAIGHT_JOIN bruges med MySQL ), virker denne løsning som en dårlig idé, men det er det eneste, jeg har prøvet, der har virket. Så nu holder jeg i hvert fald til det. Hvis nogen har nogle tanker om, hvorfor jeg ikke skal gøre dette, eller hvad jeg skal prøve i stedet, vil jeg meget gerne høre dem.

Hvis nogen er nysgerrig, implementerede jeg det som et WordPress-filter som sådan:

function use_straight_join( $distinct_clause ) {

    $distinct_clause = ( $use_straight_join ) ? 'STRAIGHT_JOIN' . $distinct_clause : $distinct_clause;

    return $distinct_clause;
}
add_filter( 'posts_distinct', 'use_straight_join' );
 

Og for fuldstændighedens skyld er her EXPLAIN output for forespørgslen ved brug af STRAIGHT_JOIN . Igen, jeg er forvirret. Den gamle forespørgsel brugte kun ref og eq_ref som jeg forstår er hurtigere end range , men dette er størrelsesordener hurtigere af en eller anden grund.

+-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+ | 1 | SIMPLE | wp_posts | range | PRIMARY,type_status_date | type_status_date | 124 | NULL | 6 | Using where; Using temporary; Using filesort | | 1 | SIMPLE | wp_postmeta | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | mt1 | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | mt2 | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | mt3 | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | mt4 | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | mt5 | ref | post_id,meta_key | post_id | 8 | db.mt3.post_id | 2 | Using where | | 1 | SIMPLE | mt6 | ref | post_id,meta_key | post_id | 8 | db.wp_posts.ID | 2 | Using where | | 1 | SIMPLE | wp_term_relationships | ref | PRIMARY,term_taxonomy_id | PRIMARY | 8 | db.wp_posts.ID | 1 | Using where; Using index | | 1 | SIMPLE | tt1 | ref | PRIMARY,term_taxonomy_id | PRIMARY | 8 | db.wp_posts.ID | 1 | Using where; Using index | | 1 | SIMPLE | tt2 | ref | PRIMARY,term_taxonomy_id | PRIMARY | 8 | db.mt1.post_id | 1 | Using where; Using index | | 1 | SIMPLE | tt3 | ref | PRIMARY,term_taxonomy_id | PRIMARY | 8 | db.wp_posts.ID | 1 | Using where; Using index | +-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+

  1. Unikt tekstfelt i MySQL og php

  2. MySQL auto-inkrementering pr. særskilt værdi indtastet i anden kolonne?

  3. Hvordan bruger man transaktioner og låse korrekt for at sikre databaseintegritet?

  4. Php:Konverter en klat til en billedfil