Maison  >  Questions et réponses  >  le corps du texte

Comment forcer Postgres à utiliser un index spécifié ?

<p>Comment forcer Postgres à utiliser un index lorsqu'il insiste pour effectuer une analyse séquentielle ? </p>
P粉785905797P粉785905797426 Il y a quelques jours625

répondre à tous(1)je répondrai

  • P粉281089485

    P粉2810894852023-08-21 18:52:40

    En supposant que vous posez des questions sur la fonctionnalité "indice d'index" commune dans de nombreuses bases de données, PostgreSQL ne fournit pas une telle fonctionnalité. Il s'agit d'une décision intentionnelle prise par l'équipe PostgreSQL. Un bon aperçu de pourquoi et de ce que vous pouvez faire peut être trouvé ici. La raison fondamentale est qu'il s'agit d'une méthode d'optimisation des performances qui a tendance à causer davantage de problèmes lorsque les données changent, et l'optimiseur de PostgreSQL peut réévaluer le plan en fonction des statistiques. En d’autres termes, ce qui pourrait être un bon plan de requête aujourd’hui n’est peut-être pas toujours un bon plan de requête, et les indications d’index imposent un plan de requête spécifique.

    En tant qu'outil de test très brut, vous pouvez utiliser les paramètres enable_seqscanenable_indexscan. Voir :

    Ceux-ci ne sont pas destinés à une utilisation en production soutenue . Si vous rencontrez des problèmes avec la sélection du plan de requête, vous devez consulter la docs pour le suivi des problèmes de performances des requêtes. Ne vous contentez pas de définir les paramètres enable_ et de partir.

    À moins que vous n'ayez une très bonne raison d'utiliser un index, Postgres fera probablement le bon choix. pourquoi ?

    • Pour les petites tables, l'analyse séquentielle est plus rapide.
    • Postgres n'utilise pas d'index lorsque les types de données ne correspondent pas, vous devrez peut-être inclure les conversions appropriées.
    • Les paramètres de votre forfait peuvent causer des problèmes.

    Voir également cet ancien message de newsgroup.

    répondre
    0
  • Annulerrépondre