Dans la plupart des applications, les types de données utilisés pour les indexes sont ceux de la famille des INT (comme les SMALLINT, TINYINT, BIGINT, etc.). Comme il s'agit d'indexes, ils sont souvent clé primaire et quasiment tout le temps auto-incrément[1].
Ce qui me perturbe avec ce principe, c'est que dans les applications Web, on trouve des indexes partout, et qu'il est assez facile de changer de page en modifiant l'URL (histoire de changer un 931 en 932 par exemple).
Dans le cas de ce (we)Blog, j'ai la possibilité d'avoir des pages privées comme celle-ci qui n'est utilisable que pour les gens à qui je donne l'URL. Ainsi, elle n'est visible de nulle part, pas même de la liste des billets de ce jour.
Et alors, me diront certains où est le rapport ? Et bien, si l'on souhaite cacher des pages à d'autres, l'utilisateur moyen++ verra que si les billets 931 et 933 sont disponibles, il essayera facilement de voir si le 932 existe, et s'il est privé il y aura quand même accès[2].
C'est pour cela que je n'utilise plus que des indexes alpha-numériques. Certes pour l'espace disque nécessaire, il est forcément plus grand qu'en utilisant des INT, mais la recherche de l'indice suivant est bien plus compliqué.
Pour comparaison, voici le nombre de combinaisons que l'on obtient avec des INT :
TNIYINT(1) = 2561 = 256 SMALLINT(2) = 2562 = 4'096 MEDIUMINT(3) = 2563 = 16'777'216 INT(4) = 2564 = 4'294'967'296 BIGINT(8) = 2568 = 18'446'744'073'709'551'615
En utilisant les 26 lettres de l'alphabet et les 10 chiffres :
CHAR(1) = 361 = 36 CHAR(2) = 362 = 1'296 CHAR(3) = 363 = 46'656 CHAR(4) = 364 = 1'679'616 CHAR(5) = 365 = 60'466'176 CHAR(6) = 366 = 2'176'782'336 CHAR(7) = 367 = 78'364'164'096 CHAR(8) = 368 = 2'821'109'907'456 CHAR(9) = 369 = 101'559'956'668'416 CHAR(10) = 3610 = 3'656'158'440'062'976 CHAR(11) = 3611 = 131'621'703'842'267'136 CHAR(12) = 3612 = 4'738'381'338'321'616'896 CHAR(13) = 3613 = 170'581'728'179'578'208'256
En utilisant les 26 lettres de l'alphabet (avec différentiation majuscule/minuscule) et les 10 chiffes :
CHAR(1) = 621 = 62 CHAR(2) = 622 = 3'844 CHAR(3) = 623 = 238'328 CHAR(4) = 624 = 14'776'336 CHAR(5) = 625 = 916'132'832 CHAR(6) = 626 = 56'800'235'584 CHAR(7) = 627 = 3'521'614'606'208 CHAR(8) = 628 = 218'340'105'584'896 CHAR(9) = 629 = 13'537'086'546'263'552 CHAR(10) = 6210 = 839'299'365'868'340'224 CHAR(11) = 6211 = 52'036'560'683'837'093'888
Le nombre entre parenthèses indiquant le nombre d'octets utilisés pour stocker le résultat, on peut constater que ma méthode devient vite gourmande en espace disque par rapport à l'utilisation des INT. Mais bon, je m'en fous ! c'est mon idée, elle est débile[3] et je l'aime comme ça !
Je suis sûr[4] que ça ressemble à utiliser un lance-roquette[5] pour écraser un moutisque/bourdon/chien/zyva[6], mais je me complais dans ma médiocrité... Vite, je vais aller me refaire un Monsieur Le Chien, histoire de me dire qu'il est temps d'aller dormir...
Note : Les références sur les tailles[7] des objets peuvent être trouvés aux adresses suivantes : Capacités des colonnes et Types numériques.
[1] Ceux qui ont déjà décroché ferait bien d'aller réviser leurs cours de SQL.
[2] Cela n'entre en jeu que dans un cadre ou aucune protection n'est mise en place.
[3] Et je ne vous parle pas du coup CPU pour générer aléatoirement les IDs...
[4] Pour ceux qui ont tenu jusque là.
[5] Ou un BGF9000.
[6] Rayez de la carte toutes ces mentions inutiles.
[7] Oui, je sais ! C'est pas la taille qui compte, c'est le goût !
| |||
© 2003-2008, Flyounet.
Nombre de billets : 416
Nombre de commentaires : 1256
Ce site respecte les standards :