Tous les produits
Search
Centre de documentation

AnalyticDB:Conditions de filtre sans pushdown

Dernière mise à jour :Aug 10, 2026

Cette rubrique explique comment et où utiliser les conditions de filtre sans pushdown.

Vue d'ensemble

Par défaut, AnalyticDB for MySQL crée un index pour chaque colonne lors de la création d'une table afin d'améliorer l'efficacité du filtrage des données. Toutefois, l'utilisation d'un index n'est pas toujours optimale et peut parfois dégrader les performances globales. Bien que vous puissiez supprimer manuellement les index, cela risque de poser problème si un index s'avère nécessaire par la suite. La fonctionnalité de désactivation du pushdown des conditions de filtre dans AnalyticDB for MySQL offre une meilleure solution. Elle permet d'empêcher temporairement le pushdown des conditions de filtre sur des colonnes spécifiques au niveau de la requête ou du cluster, ce qui améliore les performances globales des requêtes.

Envisagez de désactiver le pushdown des conditions de filtre dans les scénarios suivants :

  • Données à faible cardinalité. Lorsqu'une colonne comporte peu de valeurs uniques, le filtrage renvoie toujours une grande quantité de données, rendant l'index inefficace.

  • Pression élevée sur les E/S disque. Si vos requêtes ou des écritures massives de données entraînent une utilisation importante des E/S, l'utilisation d'un index pour le filtrage des données peut créer une contention sur les ressources d'E/S disque et réduire son efficacité.

  • Le pushdown simultané de plusieurs conditions, en particulier celles impliquant des opérations complexes telles que LIKE ou des comparaisons de chaînes, peut consommer des ressources importantes sur les nœuds de stockage et affecter les performances globales.

Vérifier si les conditions de filtre sont poussées vers le bas (pushdown)

Vérifiez si les conditions de filtre sont poussées vers le bas sur la page d'exécution.

  1. Dans l'onglet Execution Plan, cliquez sur l'étape contenant l'opérateur TableScan.

    Remarque

    Pour savoir comment accéder à l'onglet Execution Plan, consultez la section Afficher les résultats de diagnostic.

  2. Cliquez sur View Stage Plans.

  3. Sur la page du plan d'étape, cliquez sur l'opérateur TableScan.

  4. Dans le panneau Properties situé à droite, recherchez la propriété PushedDownFilter. Sa présence indique que la condition de filtre a été poussée vers le bas. Par exemple, si la valeur de la propriété PushedDownFilter est id = BIGINT '277941', cela signifie que la condition de filtre a été poussée vers la couche de stockage.

    Remarque
    • Pour un cluster en mode élastique, si un opérateur Filter apparaît dans le plan d'exécution d'une étape en aval, ses conditions de filtre associées n'ont pas été poussées vers le bas.

    • Pour un cluster en mode réservé, si un opérateur Filter apparaît dans le plan de l'étape actuelle, ses conditions de filtre associées n'ont pas été poussées vers le bas.

Désactiver le pushdown des conditions de filtre pour des colonnes spécifiques dans une requête

Dans une requête spécifique, utilisez un indice (hint) pour désactiver le pushdown des conditions de filtre pour des colonnes spécifiques. Cette opération ne s'applique qu'aux requêtes utilisant des indices.

Syntaxe

  • Pour la version mineure du moteur 3.1.4 ou ultérieure, utilisez l'indice suivant :

    /*+ filter_not_pushdown_columns=[Schema1.table1:colName1|colName2;Schema2.table2:colName1|colName2] */
  • Pour une version mineure du moteur antérieure à 3.1.4, utilisez l'indice suivant :

    /*+ no_index_columns=[table1.colName1;colName2,table2.colName1] */
Important
  • Vous pouvez utiliser un indice pour désactiver le pushdown des conditions de filtre pour des colonnes spécifiques dans des tables situées dans la même base de données ou dans des bases de données différentes. Pour une version mineure du moteur antérieure à 3.1.4, lorsque vous utilisez un indice pour des tables situées dans des bases de données différentes, assurez-vous que les noms de table sont uniques. Sinon, l'indice pourrait affecter des tables non concernées. Dans la version mineure du moteur 3.1.4 et ultérieures, les indices utilisent le format Schema.table pour différencier les tables, ce qui évite les effets indésirables lors de l'utilisation d'indices sur des tables portant le même nom dans différentes bases de données.

  • Pour afficher la version mineure du moteur de votre cluster, consultez la section Afficher les informations de version du cluster. Pour mettre à niveau la version mineure du moteur, contactez le support technique.

Exemples

  • Exemple 1 :

    Cet exemple concerne une version mineure du moteur 3.1.4 ou ultérieure. Dans la requête actuelle, les conditions de filtre sur les colonnes id et product de la table table01 dans la base de données test01 ne sont pas poussées vers le bas.

    /*+ filter_not_pushdown_columns=[test01.table01:id|product] */
  • Exemple 2 :

    Cet exemple concerne une version mineure du moteur 3.1.4 ou ultérieure. Dans la requête actuelle, les conditions de filtre sur les colonnes id et product de la table table01 dans la base de données test01, ainsi que sur la colonne key de la table table03 dans la base de données test02 ne sont pas poussées vers le bas.

    /*+ filter_not_pushdown_columns=[test01.table01:id|product;test02.table03:key] */
  • Exemple 3 :

    Cet exemple concerne une version mineure du moteur antérieure à 3.1.4. Dans la requête actuelle, les conditions de filtre sur les colonnes id et product de la table table02, ainsi que sur la colonne key de la table table03 ne sont pas poussées vers le bas.

    /*+ no_index_columns=[table02.id;product,table03.key] */

Désactiver le pushdown des conditions de filtre pour des colonnes spécifiques dans un cluster

Exécutez les instructions suivantes pour désactiver le pushdown des conditions de filtre pour des colonnes spécifiques dans toutes les requêtes du cluster actuel.

Syntaxe

  • Pour la version mineure du moteur 3.1.4 ou ultérieure, utilisez l'instruction suivante :

    set adb_config filter_not_pushdown_columns=[Schema1.tableName1:colName1|colName2;Schema2.tableName2:colName1|colName2]
  • Pour une version mineure du moteur antérieure à 3.1.4, utilisez l'instruction suivante :

    set adb_config no_index_columns=[tableName1.colName1;colName2,tableName2.colName1]
Important
  • Vous pouvez utiliser un indice pour désactiver le pushdown des conditions de filtre pour des colonnes spécifiques dans des tables situées dans la même base de données ou dans des bases de données différentes. Pour une version mineure du moteur antérieure à 3.1.4, lorsque vous utilisez un indice pour des tables situées dans des bases de données différentes, assurez-vous que les noms de table sont uniques. Sinon, l'indice pourrait affecter des tables non concernées. Dans la version mineure du moteur 3.1.4 et ultérieures, les indices utilisent le format Schema.table pour différencier les tables, ce qui évite les effets indésirables lors de l'utilisation d'indices sur des tables portant le même nom dans différentes bases de données.

  • Pour afficher la version mineure du moteur de votre cluster, consultez la section Afficher les informations de version du cluster. Pour mettre à niveau la version mineure du moteur, contactez le support technique.

Exemples

Cet exemple concerne une version mineure du moteur 3.1.4 ou ultérieure. Pour toutes les requêtes du cluster actuel, les conditions de filtre sur la colonne id de la table table02 dans la base de données test02 ne sont pas poussées vers le bas.

set adb_config filter_not_pushdown_columns=[test02.table02:id]