[wp-trac] [WordPress Trac] #39358: Media search speed has been dramatically reduced

WordPress Trac noreply at wordpress.org
Thu Dec 22 00:03:09 UTC 2016


#39358: Media search speed has been dramatically reduced
--------------------------+------------------------------
 Reporter:  merts         |       Owner:  joemcgill
     Type:  defect (bug)  |      Status:  reviewing
 Priority:  normal        |   Milestone:  Awaiting Review
Component:  Media         |     Version:  4.7
 Severity:  normal        |  Resolution:
 Keywords:                |     Focuses:  performance
--------------------------+------------------------------
Changes (by dd32):

 * keywords:  2nd-opinion =>
 * focuses:   => performance


Comment:

 The issue we have here, is quite simple - You cannot search postmeta on
 large sites, there's no way around that, it's just not possible to do it
 in a performant way.

 The user experience gained by this change is good however, it works as an
 end-user may intend the search to.

 IMHO there's a few options of varying usefulness
 a) Drop it entirely
 b) Drop it for "large sites" (ie. more than x number of post) - The UX of
 this is bad
 c) Limit it to exact matches only for the postmeta, which with the help of
 a new DB index would make it much faster.
 d) Store the attachment data in another way.

 For reference, this is what the SQL ends up looking like:
 {{{
 SELECT SQL_CALC_FOUND_ROWS wp_posts.id
 FROM   wp_posts
        LEFT JOIN wp_postmeta AS sq1
               ON ( wp_posts.id = sq1.post_id
                    AND sq1.meta_key = '_wp_attached_file' )
 WHERE  1 = 1
        AND (( ( wp_posts.post_title LIKE '%test.diff%' )
                OR ( wp_posts.post_excerpt LIKE '%test.diff%' )
                OR ( wp_posts.post_content LIKE '%test.diff%' )
                OR ( sq1.meta_value LIKE '%test.diff%' ) ))
        AND wp_posts.post_type = 'attachment'
        AND ( wp_posts.post_status = 'publish'
               OR wp_posts.post_status = 'future'
               OR wp_posts.post_status = 'draft'
               OR wp_posts.post_status = 'pending'
               OR wp_posts.post_status = 'private' )
 GROUP  BY wp_posts.id
 ORDER  BY wp_posts.post_title LIKE '%test.diff%' DESC,
           wp_posts.post_date DESC
 LIMIT  0, 10
 }}}

--
Ticket URL: <https://core.trac.wordpress.org/ticket/39358#comment:7>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list