Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL. WordPress. Permintaan lambat saat menggunakan pernyataan IN

"Solusi" yang saya temukan saat ini cukup jelek, tetapi untuk beberapa alasan yang tidak dapat dijelaskan, itu berhasil. Menambahkan STRAIGHT_JOIN petunjuk pengoptimal menurunkan waktu eksekusi dari 18+ detik menjadi sekitar 0,0022 detik. Berdasarkan akal sehat dan pertanyaan ini (Kapan menggunakan STRAIGHT_JOIN dengan MySQL ), solusi ini sepertinya ide yang buruk, tetapi itu satu-satunya hal yang saya coba yang berhasil. Jadi, setidaknya untuk saat ini, saya berpegang teguh pada itu. Jika ada yang memiliki pemikiran tentang mengapa saya tidak melakukan ini, atau apa yang harus saya coba, saya akan senang mendengarnya.

Jika ada yang penasaran, saya menerapkannya sebagai filter WordPress seperti:

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

Dan untuk kelengkapannya, berikut EXPLAIN output untuk kueri saat menggunakan STRAIGHT_JOIN . Sekali lagi, saya bingung. Kueri lama hanya menggunakan ref dan eq_ref yang saya pahami lebih cepat dari range , tapi ini beberapa kali lipat lebih cepat untuk beberapa alasan.

+-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+
| 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. Bagaimana cara menambahkan susun ke kueri laravel

  2. Formulir pengiriman tidak akan tetap berada di halaman yang sama

  3. MYSQL membandingkan pada masalah bergabung

  4. Fungsi jendela dalam kueri MySQL

  5. Urutan Angka di MySQL