servidor - La forma más eficiente de almacenar direcciones IP en MySQL
conexion remota mysql workbench (5)
¿Tal vez almacenar el valor entero directamente en un campo entero? Una dirección IP es básicamente 4 "cortos".
Échale un vistazo: http://en.kioskea.net/faq/945-converting-a-32-bit-integer-into-ip
Esta pregunta ya tiene una respuesta aquí:
- Tipo de datos para almacenar la dirección IP en las respuestas de SQL Server 10
¿Cuál es la forma más eficiente de almacenar y recuperar direcciones IP en MySQL? Ahora mismo estoy haciendo:
SELECT * FROM logins WHERE ip = ''1.2.3.4''
Donde ip es un campo VARCHAR(15)
.
¿Hay una mejor manera de hacer esto?
Lo más importante es asegurarse de que la columna esté indexada. Esto podría hacer una gran diferencia en las consultas basadas en la dirección IP.
Lo que sea más fácil para ti trabajar. El problema del tamaño o la velocidad no es un problema hasta que sepa que es un problema al hacer un perfil. En algunos casos, puede ser más fácil trabajar con una cadena si necesita hacer una coincidencia parcial. Pero como un problema de espacio o rendimiento, no se preocupe por eso a menos que tenga un motivo real para preocuparse.
Para las direcciones IPv4 , es posible que desee almacenarlas como un int unsigned
y utilizar las INET_ATON()
e INET_NTOA()
para devolver la dirección IP desde su valor numérico, y viceversa.
Ejemplo:
SELECT INET_ATON(''127.0.0.1'');
+------------------------+
| INET_ATON(''127.0.0.1'') |
+------------------------+
| 2130706433 |
+------------------------+
1 row in set (0.00 sec)
SELECT INET_NTOA(''2130706433'');
+-------------------------+
| INET_NTOA(''2130706433'') |
+-------------------------+
| 127.0.0.1 |
+-------------------------+
1 row in set (0.02 sec)
Si solo desea almacenar direcciones IPv4, puede almacenarlas en un campo entero de 32 bits.
Si también desea admitir IPv6, entonces una cadena es probablemente la forma más fácil de leer / usar (aunque técnicamente podría almacenarlas en un campo VARBINARY()
16 bytes, sería molesto tratar de generar sentencias SQL para seleccionar por dirección IP "a mano")