programing

MySQL에 IP 주소를 저장하는 가장 효율적인 방법

goodsources 2022. 9. 8. 22:45
반응형

MySQL에 IP 주소를 저장하는 가장 효율적인 방법

MySQL에서 IP 주소를 저장하고 검색하는 가장 효율적인 방법은 무엇입니까?지금 하고 있는 일:

SELECT * FROM logins WHERE ip = '1.2.3.4'

여기서 ip는VARCHAR(15)들판.

더 좋은 방법이 있을까요?

IPv4 주소의 경우, 이러한 주소를 IP 주소의int unsigned및 함수를 사용하여 IP 주소를 수치에서 반환하거나 그 반대로 합니다.

예:

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)

IPv4 주소만을 보존하는 경우는, 32비트 정수 필드에 보존할 수 있습니다.

IPv6 도 서포트하고 싶은 경우는, 스트링이 가장 읽기 쉽고 사용하기 쉬운 방법일 가능성이 있습니다(기술적으로는 16 바이트로 격납할 수 있습니다).VARBINARY()필드에서는 SQL 문을 생성하여 IP 주소로 "수동으로" 선택하는 것이 귀찮습니다.)

가장 중요한 것은 그 컬럼에 인덱스를 붙이는 것입니다.이로 인해 IP 주소에 기반한 쿼리에 큰 차이가 발생할 수 있습니다.

당신이 일하기 가장 쉬운 것이 무엇이든.사이즈나 속도의 문제는 프로파일링을 통해 알 수 있을 때까지 문제가 되지 않습니다.부분 조회를 수행해야 하는 경우 문자열이 더 사용하기 쉬운 경우가 있습니다.그러나 공간이나 성능상의 문제로 고민할 만한 실질적인 이유가 없는 한 걱정하지 마십시오.

정수 필드에 정수 값을 직접 저장할 수 있습니까?IP 주소는 기본적으로 4개의 "shorts"입니다.

http://en.kioskea.net/faq/945-converting-a-32-bit-integer-into-ip에서 확인하세요.

언급URL : https://stackoverflow.com/questions/2542011/most-efficient-way-to-store-ip-address-in-mysql

반응형