Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL. WordPress. Truy vấn chậm khi sử dụng câu lệnh IN

"Giải pháp" mà tôi đã vấp phải bây giờ là khá xấu, nhưng vì một số lý do không thể giải thích được, nó hoạt động. Thêm STRAIGHT_JOIN gợi ý trình tối ưu hóa đã giảm thời gian thực hiện từ 18 giây xuống khoảng 0,0022 giây. Dựa trên cảm nhận chung và câu hỏi này ( Khi nào sử dụng STRAIGHT_JOIN với MySQL ), giải pháp này có vẻ là một ý tưởng tồi, nhưng đó là điều duy nhất tôi đã thử đã hoạt động. Vì vậy, ít nhất bây giờ, tôi đang gắn bó với nó. Nếu ai đó có bất kỳ suy nghĩ nào về lý do tại sao tôi không nên làm điều này hoặc thay vào đó tôi nên thử điều gì, tôi rất muốn nghe họ.

Nếu ai đó tò mò, tôi đã triển khai nó dưới dạng một bộ lọc WordPress như vậy:

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

Và để đầy đủ, đây là EXPLAIN đầu ra cho truy vấn khi sử dụng STRAIGHT_JOIN . Một lần nữa, tôi cảm thấy bối rối. Truy vấn cũ chỉ được sử dụng refeq_ref mà tôi hiểu là nhanh hơn range , nhưng đây là mức độ nhanh hơn vì một số lý do.

+-----+--------------+------------------------+--------+---------------------------+-------------------+----------+-----------------+-------+----------------------------------------------+
| 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. Bảng xếp hạng giải đấu nhiều sự kiện

  2. Chèn một mảng php đa chiều vào cơ sở dữ liệu mysql

  3. Trong MySQL, với FK CONSTRAINT làm gì?

  4. Cách đặt dữ liệu nhị phân bằng setBlob () trong trình kết nối C ++

  5. Chuẩn hóa dữ liệu MySQL