2009-09-20 6 views
0

Je vais convertir la chaîne en nombre entier pour optimiser le groupe en fonction des performances.Optimisation de groupe par chaîne

Que pensez-vous de l'idée?

Le cas échéant, existe-t-il une fonction intégrée pour convertir une chaîne en un entier unique en PHP?

+1

vous pouvez utiliser crc32() pour créer un entier unique d'une chaîne. ou utilisez md5 puis convertissez du mode hexadécimal en base-10. – mauris

+0

Si les données ne sont que des entiers, pourquoi les stockez-vous dans des colonnes de chaîne en premier lieu? Avez-vous mesuré le coût ou le bénéfice de la performance? –

+0

@Mauris: CRC-32 vous donne seulement une probabilité raisonnable de générer un entier unique pour chaque chaîne - il n'est en aucun cas déterministe à 100%. Des échantillons assez petits peuvent se heurter à des collisions - différentes chaînes ayant la même valeur CRC-32. Utiliser un hachage plus gros - MD5 (128 bits au lieu de 32 bits) ou SHA-1 (160 bits) ou SHA-256 (err, croiriez-vous 256 bits) - est plus susceptible d'être unique, mais le coût de conversion est considérablement plus élevé. –

Répondre

4

Si toutes les données de cette colonne est un entier, alors il devrait être int ...

Le principal avantage que vous obtenez est qu'une comparaison entre 2 ints n'a besoin que de comparer 4 octets. Une chaîne qui exprime le même nombre sera (généralement) plus longue. Vous devriez donc être en mesure d'obtenir des performances. Mais la raison principale devrait être qu'une colonne qui sto int devrait être int.

Le groupe par l'optimisation tomberait dans la catégorie « optimisation prématurée » ... Et la principale chose qui va accélérer un groupe par la clause n'est pas le type de données, mais l'indice sur le terrain