Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
оптимизация таблицы по типу поля
|
|||
|---|---|---|---|
|
#18+
Привет народ. Вопрос по типам полей. Стоит ли что либо поменять на вариант предлагаемый mysql в плане увеличения быстродействия/уменьшения объема базы 2 млн. записей, объемом 6.6 гиг + 360 мег. индексов Практически на все поля, кроме текстовых, есть индексы и по ним идет фильтрация и/или объеденение Табличка такая: Имячто естьчто предлагает mysqlIDint(11)MEDIUMINT(7) UNSIGNED NOT NULLNAMEvarchar(255)TINYTEXT NOT NULLtitlevarchar(255)TINYTEXT NOT NULLSECTION_IDint(11)ENUM('0','1','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','30') NOT NULLsection_id2int(3)ENUM('0','1','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26') NOT NULLsection_id3int(3)ENUM('0','1','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','22','23','24','25','26') NOT NULLCOUNTRY_IDint(11)SMALLINT(3) UNSIGNED NOT NULLcountry_id2int(3)SMALLINT(3) UNSIGNED NOT NULLcountry_id3int(3)SMALLINT(3) UNSIGNED NOT NULLAGENCY_IDint(11)SMALLINT(4) UNSIGNED NOT NULLPUBtinyint(1)ENUM('0','1') NOT NULLpub_otrtinyint(1)ENUM('0','1') NOT NULLpub_foint(11)ENUM('0','1') NOT NULLTEXTmediumtextMEDIUMTEXT NOT NULLfo_idint(11)ENUM('0','1','2','3','4','5','6','7','8','10') NOT NULLfo_id2int(3)ENUM('0','1','2','3','4','5','6','7','8','10') NOT NULLwregion_idint(3)ENUM('0','1','2','3','4','5','6','7','8') NOT NULLchangedateint(11)INT(10) UNSIGNED NOT NULLdaytinyint(2)ENUM('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31') NOT NULLmonthtinyint(2)ENUM('1','2','3','4','5','6','7','8','9','10','11','12') NOT NULLyearint(10)ENUM('1997','1998','1999','2000','2001','2002','2003','2004','2005','2006','2007','2008','2009','2010','2011','2012','2013','2014','2015','2016','2017') NOT NULLdatedateDATE NOT NULLadddatedateCHAR(0)cat_atinyint(1)ENUM('0','1') NOT NULLcheckedtinyint(1)ENUM('0','1') NOT NULLlangenum('ru', 'en', 'fr')ENUM('','en','fr','ru') NOT NULLpersonvarchar(255)TINYTEXT NOT NULLkeywordstextTINYTEXT NOT NULLnot_sendtinyint(1)ENUM('0','1') NOT NULLimgtinyint(1)ENUM('0','1') NOT NULLchief_commentvarchar(255)ENUM('','где должность автора','где должность Земкова','Зачем слово РЕКЛАМА в каждой почти статье из Форбс','Опять ОНА','ошибка на ошибке','повтор ряда абзацев трижды','Реклама достала','С кем интервью, должность','ужасное кол-во ошибок') NOT NULLchief_readytinyint(1)ENUM('0','1') NOT NULLsource_urlvarchar(255)TEXT NOT NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 01:33 |
|
||
|
оптимизация таблицы по типу поля
|
|||
|---|---|---|---|
|
#18+
Возражения: 1) По всем ENUM - проверь, является ли список исчерпывающим. Если нет - дополни. Если набор может расширяться в будущем - конвертация в ENUM зависит от идеологии расширения списка (кто и как). 2) changedate - а почему дата хранится как целое? или название не соответствует содержанию? 3) С какой целью некая дата поделена на три поля day-month-year? Если так оставить - надо ENUM для года заранее расширить хотя бы лет на 5... 4) Что хранится такое в adddate, что предложено изменить тип на CHAR? 5) Значения из chief_comment разумнее вынести в таблицу-словарь, а тут оставить FK на неё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 08:14 |
|
||
|
оптимизация таблицы по типу поля
|
|||
|---|---|---|---|
|
#18+
1) tinyint бесполезно менять на ENUM. Я бы вообще с ENUM не рекомендовал бы связываться. 2) Все COUNTRY_ID действительно стоить заменить на SMALLINT. 3) Все SECTION_ID скорее всего можно заменить на SMALLINT или tinyint, смотрите по перспективе роста. 4) Необходимость существования полей day, month, year сомнительна. 5) С chief_comment непонятно. Почему у столько большого количества записей столь мало вариантов значения этого поля? 6) Заменять varchar на TEXT смысла довольно мало. Разве что для тех полей, которые читать надо будет крайне редко. 7) Поле source_url, вероятно, должно быть длиннее, чем 255 символов. По крайней мере, более длинные URL-ы существуют. 8) Плохая практика - называть объекты в БД (а данном случае поля) словами из синтаксиса. Например, TEXT, date, day, year, month и т.д. Полный список слов тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 11:07 |
|
||
|
оптимизация таблицы по типу поля
|
|||
|---|---|---|---|
|
#18+
Лучше воздержитесь от хранения набора чисел как enum. enum минимально потребует всё равно 1 байт на строку, т.е. неотличим от tinyint. Зато enum с числовыми значениями из-за излишне гибкой системы приведения типов может давать логичные, но неприятные сюрпризы. Ну, например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Мило, я считаю. Ну и добавить значение в enum на большой табличке может быть нетривиальной задачей. adddate у вас, очевидно, не содержит данных вообще и заполнен только NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 11:18 |
|
||
|
оптимизация таблицы по типу поля
|
|||
|---|---|---|---|
|
#18+
В общем я понял, что смысла что либо менять, окромя *_id с на поля поменьше нет. И про проблему ENUM с числами, тож читал 1. adddate вообще пустое, наверно уже не актуально. 2. changedate хранит timestamp, почему int понятия не имею, так сложилось исторически. 3. дата разделенная на day month year - тоже сложилось исторически. Используется для получения по месяцовой статистики. 4. chief_comment это должно быть понятно - комментарии. поле свежее, еще не обросло данными. 5. source_url на длину пока никто не жаловался, но наверно да, надо б увеличить. 6. Ну а имена полей тож сложилось исторически. База создавалась, году наверно в 2008, если не в 2005, и не мной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2017, 23:55 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=47&tid=1830873]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 149ms |

| 0 / 0 |
