Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL. WordPress. Powolne zapytanie przy użyciu instrukcji IN

„Rozwiązanie”, na które się natknąłem, jest dość brzydkie, ale z jakiegoś niewytłumaczalnego powodu działa. Dodawanie STRAIGHT_JOIN wskazówka optymalizatora zmniejszyła czas wykonania z ponad 18 sekund do około 0,0022 sekundy. Opierając się na zdrowym rozsądku i na tym pytaniu (Kiedy używać STRAIGHT_JOIN z MySQL ), to rozwiązanie wydaje się złym pomysłem, ale to jedyna rzecz, którą wypróbowałem, która zadziałała. Więc przynajmniej na razie się tego trzymam. Jeśli ktoś ma jakieś przemyślenia na temat tego, dlaczego nie powinienem tego robić lub czego powinienem spróbować zamiast tego, chciałbym go usłyszeć.

Jeśli ktoś jest ciekawy, zaimplementowałem go jako filtr WordPress w następujący sposób:

Funkcja
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' );

A dla kompletności, oto EXPLAIN dane wyjściowe dla zapytania przy użyciu STRAIGHT_JOIN . Znowu jestem zbity z tropu. Stare zapytanie używało tylko ref i eq_ref który, jak rozumiem, jest szybszy niż range , ale z jakiegoś powodu jest to o rząd wielkości szybsze.

+-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+
| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL INSERT INTO / ON DUPLICATE KEY z problemem z instrukcją SELECT

  2. Python MySQL ReferenceError:słabo powiązany obiekt już nie istnieje

  3. Jak wymusić integralność referencyjną w dziedziczeniu jednotabelowym?

  4. Rozwiązywanie problemów z nieprawidłowym kodowaniem znaków podczas wyświetlania wyników bazy danych MySQL po aktualizacji do PHP 5.3

  5. Jak odjąć 30 dni od aktualnej daty i godziny w mysql?