|
|
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Всем доброго! Есть таблица: Данные 391.5 МБ Индекс 564.4 МБ Всего 955.8 МБ Сейчас в ней два поля - BigInt и TinyInt. Индекс PRIMARY 41047072 уник. элементов, по полю BigInt. Нужно оптимизировать размер, т.е. уменьшить. Есть идея уменьшить за счет смены BigInt на простой Int, у меня данные программно получаются, и я могу изменить программу чтобы она укладывалась в обычный Int при сохранении данных. По моим представлениям (знаком с программированием, а вот с БД не очень) это все равно что перейти с 64 бит на 32 бита. Но меня смущает цифра в скобках, т.е. (BigInt(20), Int(10) и т.п.). Для чего эта цифра? Как на самом деле хранится в базе число? А если я напишу Int(7), как это будет влиять на размер таблицы? MySQL что, умеет промежуточные типы хранить, т.е. не 32 бита на число, а к примеру 18? Вторая идея по уменьшению веса таблицы - убрать индекс. Его убирать в принципе нельзя, т.к. скорость все таки нужна. Но у меня данные (поле, к-рое PRIMARY) отсортированные, они программно создаются, и уже заранее отсортированы по возрастанию. В моем случае создание базой индекса - просто повторная работа, да еще и забирающая места столько же, сколько сами данные занимают. Если я удалю индекс, база начнет тупо искать перебором? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 17:21:16 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Еще хотел спросить, влияет ли тип индексируемых данных на размер индекса. Если тип станет в два раза меньше, с BigInt(20) на Int(10), индекс тоже в два раза меньше места занимать станет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 17:27:13 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
foggy_hhНо меня смущает цифра в скобках, т.е. (BigInt(20), Int(10) и т.п.). Для чего эта цифра? Как на самом деле хранится в базе число? А если я напишу Int(7), как это будет влиять на размер таблицы? MySQL что, умеет промежуточные типы хранить, т.е. не 32 бита на число, а к примеру 18?Считайте, что эти числа ничего не означают. Размер данных всегда будет соответствовать типу, т.е. BigInt - 8 байт, Int - 4 байта и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 17:31:49 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
foggy_hhЕще хотел спросить, влияет ли тип индексируемых данных на размер индекса. Если тип станет в два раза меньше, с BigInt(20) на Int(10), индекс тоже в два раза меньше места занимать станет?Влияет, но не пропорционально, т.к. помимо собственно значений, в индексе еще хранится информация об его собственной структуре и указатели на записи в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 17:32:57 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
foggy_hhВторая идея по уменьшению веса таблицы - убрать индекс.Какой тип таблицы? Нужно уменьшить размер хранимых данных или размер читаемых данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 17:35:01 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
miksoftКакой тип таблицы? Тип таблиц сейчас посмотрел. Оказалось, что phpMyAdmin на локальном создал по умолчанию InnoDB, а на удаленном сервере MyISAM. Я как раз не мог понять, почему такая разница, на локальном он мне и другой размер таблицы (больший) и размер индекса нулевой выдает, хотя данные те же. Думал, это баг в phpMyAdmin. На сервере, там где MyISAM таблицы, общий размер данных и индекса phpMyAdmin показывает меньше, чем размер самих только данных на InnoDB таблицах. Мне для задачи нужна быстрая выборка одной записи по одному полю. Как я уже писал, данные в поле, по к-рому идет поиск, уже отсортированы. miksoftНужно уменьшить размер хранимых данных или размер читаемых данных? Не понял вопрос. В чем разница? Они у меня все должны быть доступны по запросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 18:02:28 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Если имеется ввиду, долговременно хранимые, то таких у меня нет, мне нужно чтобы всегда можно было запрос к ним делать. Долговременно я и дома на диске могу хранить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 18:05:03 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
foggy_hhmiksoftКакой тип таблицы? Тип таблиц сейчас посмотрел. Оказалось, что phpMyAdmin на локальном создал по умолчанию InnoDB, а на удаленном сервере MyISAM. Я как раз не мог понять, почему такая разница, на локальном он мне и другой размер таблицы (больший) и размер индекса нулевой выдает, хотя данные те же. Думал, это баг в phpMyAdmin. На сервере, там где MyISAM таблицы, общий размер данных и индекса phpMyAdmin показывает меньше, чем размер самих только данных на InnoDB таблицах. Мне для задачи нужна быстрая выборка одной записи по одному полю. Как я уже писал, данные в поле, по к-рому идет поиск, уже отсортированы.Я бы предложил в данном случае использовать именно InnoDB, т.к. его первичный ключ - это, фактически, сама таблица (или наоборот). Т.е. нет дополнительных структур. И когда найдено нужное значение в первичном ключе, то тут же рядом лежат и все остальные поля таблицы, за ними не нужно отдельно ходить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 18:15:42 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
foggy_hhmiksoftНужно уменьшить размер хранимых данных или размер читаемых данных? Не понял вопрос. В чем разница? Они у меня все должны быть доступны по запросу.У многих СУБД, в т.ч. у MySQL есть такое понятие - покрывающий индекс. Если в индекс входят все поля, которые нужны для выполнения какого-то запроса (да еще, желательно, в нужном порядке), то СУБД может не читать саму таблицу вообще, а только индекс. В итоге таблица и индекс хранятся, а читается только индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 18:19:54 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Понятно. Вот пример данных, они очень просты, но их может быть очень много: ... 97689610 1 97689611 1 97689612 1 97689613 1 97689614 1 97689615 1 97689616 1 97689617 1 97689618 1 ... Да, еще важный момент. Возможность записи не нужна, только чтение. Нашел еще инфу про сжатые MyISAM таблицы, и про движок ARCHIVE. Если они не сильно замедлят выборку, то это было бы неплохо. Я пробовал исходный файл ZIP'ом жать, очень хорошо жмется, до 14 процентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 18:56:50 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Если жать хотите - вам InnoDB Barracuda получше будет, имхо. Линки в тему: http://dba.stackexchange.com/questions/14246/innodb-file-format-barracuda http://stackoverflow.com/questions/9930556/innodb-table-optimization-w-o-locking-table http://habrahabr.ru/post/126375/#comment_4163361 Вопрос - а почему встала задача место сэкономить ? Гигабайт это много ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2013, 22:40:16 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
krevedko13, Гигабайт это не много, но во первых такая таблица будет не одна, а во вторых все это будет работать на дешевом хостинге с SSD, места не очень много предоставлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2013, 06:55:05 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
За ссылки спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2013, 06:56:59 |
|
||
|
Влияние типа данных Int на размер таблицы и индекса
|
|||
|---|---|---|---|
|
#18+
Очередной виток эволюции. Сначала все экономили килобайты, потом перестали. Потом опять начали, т.к. мобилки пошли. Потом опять перестали. Вот сейчас SSD, теперь уже гигабайты экономим, к-рые вроде бы уже перестали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2013, 07:00:21 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38339439&tid=1836408]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 324ms |

| 0 / 0 |
