WordPress.org

Make WordPress Core

Ticket #24837: taxonomy_optimization_patch_for_and_operations.patch

File taxonomy_optimization_patch_for_and_operations.patch, 1.6 KB (added by robertv123, 19 months ago)

svn diff for modification of taxonomy.php

  • wp-includes/taxonomy.php

     
    722722 
    723723                                $terms = implode( ',', $terms ); 
    724724 
    725                                 $where[] = "( 
    726                                         SELECT COUNT(1) 
     725                                /* selects in wheres are very slow in mysql 
     726                                so it needs to be broken down manually and done  
     727                                by a join*/ 
     728                                // make sure we don't have duplicate tempary tables on high load 
     729                                do  { 
     730                                        $tableid = time().'_'.floor(rand(1,100000)); 
     731                                        $table = "temp_tax_" . $tableid; 
     732                                        $table1 = "temp_tax1_" .$tableid; 
     733                                        $wpdb->query(  
     734                                                $wpdb->prepare( "SHOW TABLES LIKE ? ", $table1)); 
     735                                } while($wpdb->num_rows); 
     736                                //create temp 
     737                                $wpdb->query("create temporary table $table ( object_id bigint(20) unsigned, term_taxonomy_id bigint(20) unsigned) "); 
     738                                $wpdb->query("create temporary table $table1 ( object_id bigint(20) unsigned, c int ) "); 
     739                                $wpdb->query("insert into $table select  object_id , term_taxonomy_id from  wp_term_relationships where term_taxonomy_id IN ($terms)"); 
     740                                $wpdb->query("insert into $table1 select object_id,count(*) from $table group by object_id"); 
     741                                $join .= " , $table1 AS tt "; 
     742                                // get rid of first temp table, second is needed for query 
     743                                $wpdb->query("DROP TABLE $table"); 
     744                                $where[] = " tt.c = $num_terms AND tt.object_id = wp_posts.ID "; 
     745 
     746/*old code 
     747                                ( 
     748                                        SELECT COUNT(1)  
    727749                                        FROM $wpdb->term_relationships 
    728750                                        WHERE term_taxonomy_id IN ($terms) 
    729751                                        AND object_id = $primary_table.$primary_id_column 
    730752                                ) = $num_terms"; 
     753*/ 
    731754                        } 
    732755 
    733756                        $i++;