smallint vs integer

Rynor

stay hungry
smallint vs integer

Уважаемые, в ходе рефакторинга БД обнаружил много int полей, которые, исходя из реальных данных, логично сменить на smallint.
База относительно большая, таблицы от 1K до нескольких М записей.

Но получил возражение, что хотя smallint и экономит место на диске, зато увеличивает время вычислений сервером MySQL, так как smallint приводится к integer. Платформа 32-разрядная.

Встретил и такое мнение: http://forum.mysqlperformanceblog.com/s/m/640/
Computation is always done using signed 64bit integer in MySQL (even for 32bit)
То есть даже для 32-разрядных платформ идёт преобразование в 64-разрядный integer? Что-то верится с трудом.

В документации тема smallint vs integer не раскрыта, прошу помощи!

А вопрос такой: есть ли смысл переводить поля в smallint?

Заранее спасибо за помощь!
 

Vladson

Сильнобухер
Даже если бы это (smallint приводится к integer) было правдой (в чём я сомневаюсь) то прирост скорости можно было бы ожидать на 486-м процессоре или первых пеньках, а в современных компах с большим кешем и со всякими MMX-ами и прочими "фигнюшками" большой разницы не увидишь...

Видимо такие теории стали рождаться после провала 24-х битного цвета когда оказалось что увеличение до 32-х бит вовсе не будет медленнее...

А уж со стороны здравого смысла и вовсе очевидно что там где можно юзать smallint лучше юзать именно его (а не придумывать себе не существующих теорий)
 

Rynor

stay hungry
Тут теории быть не может, или smallint приводится, или нет :)

Если да, то операции со smallint могут быть медленнее... теоретически, я не эксперт.

Речь идёт о современных серверах под большой нагрузкой, из-за чего вопросы оптимизации стоят серьёзно. Какие уж тут пеньки.
 

Фанат

oncle terrible
Команда форума
Уважаемые, в ходе ремонта автомобиля обнаружил много чеков с суммами, включающими копейки, которые, исходя из реальных данных, логично логично округлить до рублей.
Сумма за ремонт относительно большая, счета от 1K до нескольких М рублей.

Помогите, люди добрые, сэкономить!
 

Rynor

stay hungry
Фанат, смешно, спасибо, но. Тогда уж пиши - бред, нет такого приведения smallint к integer. Или если есть, то - "не смеши народ, экономишь на спичках". А то у тебя неадекватное сравнение может получиться. Я конкретику спрашиваю, а не общий взгляд.

Вот в smallint я конкретику вижу, он мне сэкономил много сот мегабайт, но хочется убедительно разрулить возражение, описанное в первом посте.
 

Vladson

Сильнобухер
Автор оригинала: Rynor
Вот в smallint я конкретику вижу, он мне сэкономил много сот мегабайт, но хочется убедительно разрулить возражение, описанное в первом посте.
Это посмотреть руки дошли, а посмотреть стало быстрее работать или медленнее даже в мыслях не было ?
 

Фанат

oncle terrible
Команда форума
А с чего ты взял, что я про приведение smallint к integer?
Если ты не понял, то я про соотношение этой "экономии" и размера остальной базы.
 

Rynor

stay hungry
Vladson
Было. Методики тестирования не было - запросов много всяких разных, а времени мало. Засим быстро прибёг с поклоном. Но вижу придёца тестить самому ;)


Фанат
Я понял. Но это общие слова. Про экономию я и сам написать в состоянии, может не так смешно получится, но суть та же.
 

dadoc

Новичок
Rynor
Вот такой вопрос возник, вы с данными какие то математический операции при выборке производите или просто выборки?

Вполне возможно на таблицах с миллионами записей будет выигрыш в пространстве необходимом для для хранения INT(4 байта) vs SMALLINT(2 байта) а если у вас таблица занимает мегабайты то это не принципиально :)
 

Rynor

stay hungry
Как правило, просто выборки. Буду тестировать, так как ответ так и не получил.
 
Сверху