web-dev-qa-db-fra.com

Quels effets l'utilisation d'un classement binaire a-t-elle?

En répondant à cette question , je suis devenue incertaine à propos de quelque chose à laquelle je n'ai pas réussi à trouver une réponse suffisante.

Quelles sont les différences pratiques entre l'utilisation du binaire utf8_bin et des collations utf8_general_ci insensibles à la casse? 

Je peux en voir trois:

  1. Les deux ont un ordre de tri différent; L'ordre de tri de _bin est susceptible de placer des trémas à la fin de l'alphabet, car les valeurs d'octet sont comparées (non?)

  2. Seules les recherches sensibles à la casse dans _bin 

  3. Pas d'égalité A = Ä dans _bin

Y a-t-il d'autres différences ou effets secondaires à connaître?

Référence:

Des questions similaires qui ne traitent pas le problème:

42
Pekka 웃

Le classement binaire compare votre chaîne exactement comme le ferait strcmp () en C, si les caractères sont différents (que ce soit juste la casse ou la différence diacritique). L'inconvénient est que l'ordre de tri n'est pas naturel.

Un exemple d'ordre de tri non naturel (comme dans "binaire" est): A, B, a, b L'ordre de tri naturel serait dans ce cas, par exemple: A, a, B, b (petites et majeures variations de la mémoire) les lettres sont triées les unes à côté des autres)

L'avantage pratique du classement binaire est sa rapidité, car la comparaison de chaînes est très simple/rapide. En général, les index binaires peuvent ne pas produire les résultats attendus pour le tri, mais ils peuvent être utiles pour les correspondances exactes.

50

Les autres réponses expliquent bien les différences.

Le classement binaire peut être utile dans certains cas:

  • la colonne contient des données hexadécimales telles que les hachages de mots de passe
  • vous ne vous intéressez qu'aux correspondances exactes, pas au tri
  • pour les identificateurs comportant uniquement des caractères [a-z0-9_], vous pouvez même l'utiliser pour le tri
  • pour une raison quelconque, vous stockez des numéros dans des colonnes CHAR () ou VARCHAR (comme des téléphones)
  • codes ZIP
  • UUID
  • etc

Dans tous ces cas, vous pouvez enregistrer un (peu) peu de cycles de processeurs avec un classement binaire.

1
peufeu

Avec utf8_general_ci , les correspondances se font sans tenir compte de la casse ni de l’accentuation. Ce peut être une bonne chose lorsque vous devez effectuer des requêtes sur des mots.

Dans utf8_bin , la correspondance ne se produit que lorsque les chaînes sont strictement identiques. Les requêtes sont plus rapides de cette façon.

0
Mathieu Rodic