@PigData

MySQL оптимизация размера (INDEX,ENUM)?

Задача - максимально оптимизировать размер таблицы (скорость записи/чтения вторична) myisam, или innodb с повторяющимися данными без выноса данных в другие таблицы.

Допустим это статистика посещений и разрешения экрана мы можем перечислить в enum (+значение "другие"), но как быть например с IP которые заранее не известны, могут дублироваться десятки тысяч раз и явно выйдут за пределы лимитов поля enum. Какой подход тут будет наиболее эффективен - формат таблицы (myisam/innodb), вынос/нет в индексы, формат строк, сжатие?
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 2
kawabanga
@kawabanga
А вы не задумывались что ерунду придумываете c ENUM? сколько размеров экрана существует? только самых распространенных я сразу размеров 20 вспомню. А их может быть очень много.

Про ENUM очень просто -
https://dba.stackexchange.com/questions/6962/advan...

(myisam/innodb), - тоже давно уже решено - почти всегда нужно использовать innodb. так же статей много по этому поводу.

IP адрес можно в intege хранить IP->INTEGER есть функции, но учтите, что IP6 еще бывают.
Размер экрана - Varchar(9), чтобы записывать по маске 9999:9999

Индексы вам не нужны, по крайней мере из текущей задачи.
Ответ написан
ivankomolin
@ivankomolin
Для оптимизации данных по ip адресам, их необходимо хранить в поле типа VARBINARY

VARBINARY(16) для IPv6
VARBINARY(4) для IPv4

Пример преобразований
mysql> SELECT HEX(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
        -> 'FDFE0000000000005A55CAFFFEFA9089'
mysql> SELECT HEX(INET6_ATON('10.0.5.9'));
        -> '0A000509'


Точно не помню, но кажется появились эти функции только в mysql 5.6
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы