Я збираюся створити таблицю з двома полями - IDяк BIGINTі IPAddressяк або varchar(45)або varbinary(16). Ідея полягає в тому, щоб зберігати всі унікальні IP-адреси та використовувати посилання IDзамість фактичного IP addressв інших таблицях.
Як правило, я збираюся створити збережену процедуру, яка повертає IDзадану IP addressабо (якщо адресу не знайдено) вставити адресу та повернути згенеровану ID.
Я очікую, що у мене буде багато записів (я не можу точно сказати, скільки), але мені потрібно, щоб збережена вище процедура була виконана якомога швидше. Отже, мені цікаво, як зберігати фактичну IP-адресу - у текстовому чи байтовому форматі. Що буде краще?
Я вже написав SQL CLRфункції для перетворення байтів IP-адреси в рядкові та зворотні, тому перетворення - це не проблема (робота з обома IPv4та IPv6).
Я думаю, мені потрібно створити індекс для оптимізації пошуку, але я не впевнений, чи слід включати IP addressполе до кластерного індексу, або створити окремий індекс і з яким типом пошук буде швидшим?
IPv4я думаю, я би перетворив адресу INTі використовував поле як індексний ключ. Але для того, що IPv6мені потрібно використовувати два BIGINTполя, і я вважаю за краще зберігати значення в одному полі - мені здається більш природним.