Changeset 94692 in spip-zone


Ignore:
Timestamp:
Jan 21, 2016, 3:03:57 PM (4 years ago)
Author:
cedric@…
Message:

Perf issue : contrintuitivement il est beaucoup plus rapide sur les grosses bases de passer par un sql_all_fetsel + array_map + sql_in que par une sous requete SQL,
meme si cela oblige a raptrier le resultat intermediaire en PHP et a le reinjecter dans la requete fille
+ ajout de 2 index id_objet et objet sur la table spip_rubriques_liens

Location:
_plugins_/polyhierarchie/branches/v2.0
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/branches/v2.0/paquet.xml

    r90501 r94692  
    22        prefix="polyhier"
    33        categorie="navigation"
    4         version="2.0.10"
     4        version="2.1.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
    77        logo="images/polyhier-32.png"
    8         schema="0.1.0"
     8        schema="0.2.0"
    99        documentation="http://contrib.spip.net/Polyhierarchie"
    1010>       
  • _plugins_/polyhierarchie/branches/v2.0/polyhier_administrations.php

    r53211 r94692  
    2222        $spip_rubriques_liens_key = array(
    2323                        "PRIMARY KEY"           => "id_parent,id_objet,objet",
    24                         "KEY id_parent" => "id_parent");
     24                        "KEY id_parent" => "id_parent",
     25                        "KEY id_objet"  => "id_objet",
     26                        "KEY objet"     => "objet",
     27        );
    2528
    2629        $tables_auxiliaires['spip_rubriques_liens'] = array(
     
    3942function polyhier_upgrade($nom_meta_base_version,$version_cible){
    4043        include_spip('inc/meta');
    41         $current_version = 0.0;
    42         if (   (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
    43                         || (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
    44                 if (version_compare($current_version,'0.1.0','<')){
    45                         include_spip('base/create');
    46                         include_spip('base/abstract_sql');
    47                         creer_base();
    48                         ecrire_meta($nom_meta_base_version,$current_version="0.1.0",'non');
    49                 }
    50         }
     44
     45        $maj = array();
     46        $maj['create'] = array(
     47                array('maj_tables',array('spip_rubriques_liens')),
     48        );
     49
     50        $maj['0.2.0'] = array(
     51                array('maj_tables',array('spip_rubriques_liens')),
     52        );
     53       
     54        include_spip('base/upgrade');
     55        maj_plugin($nom_meta_base_version, $version_cible, $maj);
    5156}
    5257
  • _plugins_/polyhierarchie/branches/v2.0/polyhier_fonctions.php

    r78483 r94692  
    4949                $type = objet_type($boucle->type_requete);
    5050                $cond = "is_array(\$r=$arg)?sql_in('rl.id_parent',\$r):'rl.id_parent='.\$r";
    51                 $sous = "sql_get_select('rl.id_objet','spip_rubriques_liens as rl',$cond.' AND objet=\'$type\'')";
    52                 $where[] = "array('IN', '".$boucle->id_table.".".$boucle->primary."', '('.$sous.')')";
     51                $sous = "sql_allfetsel('rl.id_objet','spip_rubriques_liens as rl',$cond.' AND rl.objet=\'$type\'')";
     52                $where[] = "sql_in('".$boucle->id_table.".".$boucle->primary."', array_map('reset',$sous))";
    5353        }
    5454        if (count($where)==2)
     
    9999                $arg = kwote(calculer_argument_precedent($idb, id_table_objet(objet_type($boucle_parent->type_requete)), $boucles));
    100100                $type = objet_type($boucle_parent->type_requete);
    101                 $sous = "sql_get_select('rl.id_parent','spip_rubriques_liens as rl','rl.id_objet='.$arg.' AND objet=\'$type\'')";
    102                 $where[] = array("'IN'", "'$primary'", "'('.$sous.')'");
     101                $sous = "sql_allfetsel('rl.id_parent','spip_rubriques_liens as rl','rl.id_objet='.$arg.' AND rl.objet=\'$type\'')";
     102                $where[] = "sql_in('$primary', array_map('reset',$sous))";
    103103        }
    104104        if (count($where)==2)
     
    205205                $type = objet_type($boucle->type_requete);
    206206                $primary = $boucle->id_table.".".$boucle->primary;
    207                 $sous = "sql_get_select('rl.id_objet','spip_rubriques_liens as rl',sql_in('rl.id_parent',\$b" . ($not ? ", 'NOT'" : '') . ").' AND objet=\'$type\'')";
    208                 $where[] = "array('IN', '$primary', '('.$sous.')')";
     207                $sous = "sql_allfetsel('rl.id_objet','spip_rubriques_liens as rl',sql_in('rl.id_parent',\$b" . ($not ? ", 'NOT'" : '') . ").' AND rl.objet=\'$type\'')";
     208                $where[] = "sql_in('$primary', array_map('reset',$sous))";
    209209        }
    210210
Note: See TracChangeset for help on using the changeset viewer.