Je me demande s'il y a un effet positif dans l'utilisation de l'indicateur UNSIGNED pour définir un champ entier dans MySQL? Est-ce que cela rend les requêtes plus rapides ou les bases de données plus petites? Ou devrais-je m'en préoccuper seulement si je suis préoccupé par la limite supérieure?Signé ou non signé dans MySQL
Répondre
Selon section 10.2 du MySQL 5.1 Manuel:
En mode non-stricte, lorsqu'une out-of-plage de valeurs est attribuée à une colonne de type entier , MySQL stocke la valeur représentant la concordance extrémité du type de données de colonne . Si vous stockez 256 dans une colonne TINYINT ou TINYINT UNSIGNED, MySQL stocke respectivement 127 ou 255. Quand un à virgule flottante ou à virgule fixe colonne est affectée une valeur qui dépasse la plage impliquée par la spécifiée (ou par défaut) précision et une échelle, MySQL stocke la valeur représentant le point d'extrémité correspondant de cette gamme.
L'utilisation de UNSIGNED n'est donc vraiment nécessaire que lorsque vous êtes concerné par la limite supérieure. L'ajout d'UNSIGNED n'affecte pas non plus la taille de la colonne, mais le numéro represented.
Utilise unsigned lorsque la colonne est uniquement destinée à contenir des nombres positifs.
Cela n'affectera pas les performances d'E/S sur la colonne, car elle occupera exactement la même quantité d'espace.
Cela n'a pas d'importance sauf si vous essayez de tirer le meilleur parti de votre argent des valeurs et n'avez pas besoin de valeurs négatives. Par exemple, supposons que vous vouliez stocker 0-255.
Vous pouvez utiliser une tinyint mais seulement si vous l'utilisez comme non signé.
Beaucoup de bases de données que j'ai vues, les gens ne s'embarrassent pas de l'optimisation de ce genre et se retrouvent avec des tables plutôt grandes parce qu'ils utilisent simplement des INTs tout le temps. Cependant, si vous parlez de int vs unsigned int, il n'y a aucun effet de performance ou d'espace. Du point de vue des standards, j'utilise toujours unsigned et n'utilise que signé quand je sais que je vais avoir besoin de valeurs négatives.
Quand il s'agit de performance ou de stockage, c'est absolument la même chose. En règle générale, utilisez la règle qui vous convient le mieux: si vous n'avez besoin que de valeurs positives, stockez les valeurs sous UNSIGNED, sinon, laissez la valeur par défaut [SIGNED]. Un problème survient lorsqu'une valeur SIGNED est définie pour une colonne PRINCARY AUTOINCREMENT: le comptage des nombres générés automatiquement commence par 1 (pas le plus petit nombre négatif) et les valeurs possibles se terminent plus tôt, car vous utiliserez uniquement une moitié de valeurs. Donc, dans ce cas (colonne PRIMARY + AUTOINCREMENT), il est préférable de stocker comme UNSIGNED.
Il permettra d'améliorer la peroformance, laisse supposer si vous voulez rechercher la quantité < 50o.Sans "unsigned": Le flux de processus, puisque le champ de quantité est un "int" et vous avez un index de ce champ, MySQL définira la plage comme -2147483648 à 500 et il obtiendra le résultat basé sur ce gamme. Avec "unsigned": Flux de processus, puisque le champ de quantité est un "int" avec "unsigned" et vous avez un index de ce champ, MySQL définira la plage de 0 à 500 et il obtiendra le résultat basé sur cette gamme.
Avertissement, il y a un problème avec Unsigned Int (UINT) et Entity Framework ou ADO.NET. Il peut impliquer un problème d'intégration par la version MySql 6. Connecteur
Dans mon expérience, UInt
est lu comme Long
par l'EF, ce qui pourrait soulever des problèmes de précision, puisque UInt
n'est pas Long
. Cela pourrait causer des maux de tête à quiconque n'est pas familier avec le problème.
Autres préoccupations:
Ici vous pouvez voir les MySQL documentation pour les gammes de SIGNÉS contre UNSIGNED. INTs Vous remarquerez rapidement que le plancher d'un INT non signé est toujours 0, donc il ne peut jamais être négatif.
Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615
- 1. signé conversions non signées
- 2. Comment faire pour convertir un entier de 32 bits de non signé à signé en MySQL ou PHP?
- 3. Le mot de type de données msvc est-il signé ou non signé?
- 4. Symbole d'avertissement Applet Java non signé
- 5. Incrément non signé C# multi-threadé
- 6. Convertir HICON pour le long non signé
- 7. Hexadécimal à un tableau non signé 8 bits dans VB.NET
- 8. hex à 64 Signé Décimal
- 9. numéro de certificat auto-signé
- 10. Comment convertir un System :: String en un caractère non signé *?
- 11. Certificat auto-signé dans Windows sans makecert?
- 12. Utilisation de CreateObject ("Excel.Application") - problèmes avec le contrôle non signé
- 13. E-mail "Signé" en PHP
- 14. Test d'unité VS 2010 et type non signé
- 15. Comment déterminez-vous la longueur d'un char * non signé?
- 16. Pourquoi ou pourquoi ne pas utiliser 'UL' pour spécifier non signé longtemps?
- 17. Macro pour tester si un type entier est signé ou non
- 18. Module de graissage compilé et signé
- 19. coche lorsque pdf est signé avec iText
- 20. Signé 64 par 32 division entière
- 21. Coda SVN avec auto-signé SSL
- 22. Ajouter PDF à un PDF signé
- 23. Comportement défini de conversion de char * non signé en char * dans Objective-C
- 24. Comment puis-je supprimer un entier (non signé) dans ActionScript/Flex 3?
- 25. Comment lire les nombres hexadécimaux dans un int non signé C
- 26. Comment charger uniquement l'assembly signé dans un nouvel AppDomain?
- 27. Problème de certificat auto-signé dans IIS 7.0
- 28. Applet Java signé écrit dans un fichier texte
- 29. Un Jar signé peut-il être exécuté en tant qu'exécutable?
- 30. Suffixe long et suffixe non signé requis lors de la déclaration de littéraux longs en C++?
De même, il existe une amélioration des performances par rapport à l'index pour les cas où vous ne stockez que des valeurs non signées. Comme @ kevin-loney a dit, il peut gagner du temps sur l'indexation des valeurs supérieures. S'il vous plaît voir [l'article que j'avais écrit] (http://rakesh.sankar-b.com/2010/08/25/mysql-unsigned-int-to-signed-int-performance-tips-index/) à propos de l'utilisation type non signé sur signé. –
VOUS ÊTES UN ROI, ROI, BRO! Vous venez de me sauver beaucoup de cerveau f ... par la direction ci-dessus. :-) Je vous remercie! –