Mysql
 sql >> Base de données >  >> RDS >> Mysql

indexer un champ de bits dans MYSQL

D'une manière générale, non. Un champ à deux états n'accélère pas les requêtes lorsqu'il est indexé, car vous devez examiner la moitié des lignes en moyenne. Vous voulez que vos entrées d'index soient sélectives - une entrée donnée dans l'index ne doit représenter qu'un petit pourcentage des valeurs possibles (par exemple, moins de 10 %, de préférence en fractions de pourcentage). Ensuite, l'utilisation de l'index ignore la plupart des données de la table, ce qui vous donne un avantage en termes de performances.

Certains SGBD prennent en charge les index bitmap. Ils peuvent vous aider, mais vous rencontrez toujours le problème de la sélectivité.

La question mise à jour indique que le nombre de valeurs avec la valeur 1 sera petit (moins d'un pour cent); un index vous apportera-t-il un avantage maintenant ?

La réponse est :

  • Pour les requêtes où vous spécifiez que la valeur est 1, alors oui, un index sur la colonne peut offrir un avantage, à condition que l'optimiseur utilise réellement l'index. Vous devrez peut-être modifier le SGBD pour lui faire réaliser que l'index est biaisé en faveur de son utilisation avec des requêtes où la valeur est 1 ; cela a tendance à être spécifique au SGBD, mais la mise à jour des statistiques sous diverses formes est le nom du jeu, éventuellement en utilisant également des astuces dans les requêtes SQL. Bien sûr, si l'optimiseur n'utilise jamais l'index, il n'offre toujours aucun avantage - et l'optimiseur peut décider que d'autres index l'aident davantage d'une manière ou d'une autre.

  • Pour les requêtes où la valeur est 0, l'index ne doit pas être utilisé. Cependant, il y a de fortes chances que le SGBD continue à maintenir l'index pour les valeurs 0 également - même s'il ne devrait jamais les utiliser. Ce serait un SGBD inhabituel qui pourrait être commandé "indexer uniquement cette colonne pour les valeurs autres que zéro", même si cela serait très bénéfique.

Alors - ça dépend. Cela dépend des requêtes, et cela dépend de l'optimiseur.

Notez également qu'un index composite - sur d'autres colonnes habituellement utilisées, puis sur le champ de bits, peut très bien apporter certains avantages. Ainsi, si vous sélectionnez presque toujours une plage de dates, un index composite sur les colonnes de date et de champ de bits (probablement dans cet ordre) devrait vous fournir un bon index.