SELECT x FROM таблица с огромными полями. Создать ли отдельную таблицу с "x" для оптимизации
Всем привет, ситуация такая.
На сайте с книгами есть таблица chapters с полями book_id (ключ на другую таблицу), chapter_title (название главы), chapter_text (текст главы).
Проблема в том, что поле chapter_text может содержать огромное количество символов, вплоть до нескольких мегабайт!
Так вот, много где используется запрос SELECT title FROM book_chapters WHERE book_id = XYZ ORDER BY id исключительно для того, чтобы получить и вывести список глав конкретной книги, но сами тексты этих глав не нужны, поэтому я исключил из выборки select то самое гигантское поле текста .
Я где-то читал, что, когда ищется в строке с большим размерами, то требуется больше оперативной памяти и больше времени, даже несмотря на то, что я ограничил SELECT легкими полями.
Поэтому может лучше выделить отдельную таблицу для хранения текста? То есть, может лучше разделить эту таблицу на легкую chapter_title (id, book_id, title) и огромную chapter_text (chapter_title_id, chapter_text).
И в итоге для получения списка глав нужно лишь делать запрос к одной очень легкой таблице book_chapter! А к таблице с текстом делать запрос только тогда, когда человек читает.
На данный момент я не замечаю каких-то проблем, ищется по времени нормально, но мало ли, когда народу много, и когда просматривается много тяжелых книг, сайт переодически подвисает из-за этого, а я не в курсе (я совсем не шарю в мониторинге и профайлинге да и в администрировании в целом, только в программировании.)
Ответы (1 шт):
Хм, кажется нашел ответ на свой вопрос вот тут https://stackoverflow.com/questions/13760998/store-text-blob-in-same-table-or-not. Если есть возможность включить такой параметр innodb_file_format=barracuda, то нет смысла отделять большие тексты в отдельные таблицы - их БД сама уже там будет хранить. Надеюсь, я все правильно понял )