Всем привет, ситуация такая.
На сайте с книгами есть таблица 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! А к таблице с текстом делать запрос только тогда, когда человек читает.
На данный момент я не замечаю каких-то проблем, ищется по времени нормально, но мало ли, когда народу много, и когда просматривается много тяжелых книг, сайт переодически подвисает из-за этого, а я не в курсе (я совсем не шарю в мониторинге и профайлинге да и в администрировании в целом, только в программировании.)