Оптимизация MySQL

Metal Messiah
На сайте с 01.08.2010
Offline
163
520

Доброго времени суток.

Интересует такой момент: если у меня таблица - каталог объектов или типа того, сотня тысяч записей с очень небольшим объемом информации (название, тип, адрес, ... итого десяток полей статической длины) и есть поле описания типа TEXT, в котором вряд ли будет больше пары предложений, но местами может быть и много букв.

Есть ли смысл делать не одну, а 2 таблицы - в первой индекс и все поля, в другой тот же индекс и текстовые описания?

Видел в DLE статистику выкинули в отдельную таблицу, но там чтобы запись статы не блокировала доступ к основной информации. У меня же получается что при части запросов текстовые описания не нужны. Уменьшение времени чтения из базы только за счет снижения размера просматриваемого файла на диске, но второй (лишний) запрос при отображении части страниц. Или это мелочь и нет смысла возиться?

Конечно, эксперимент с замером среднего времени никто не отменял но лучше спросить :)

anonymous, думай что говоришь и не забывай подписать отзыв :)
SocFishing
На сайте с 26.09.2013
Offline
118
#1

Нет смысла если тянуть будет все сразу. Так вы только создадите 2 запроса. Для высоконагрузок используются http://habrahabr.ru/post/253017/

В вашем случае лимит на выборку и хватит.

★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
edogs software
На сайте с 15.12.2005
Offline
775
#2

Есть смысл конечно.

У Вас и поиск по основной таблице шустрее будет и поля будут фиксированной длины в ней, а не произвольной как сейчас.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Metal Messiah
На сайте с 01.08.2010
Offline
163
#3

SocFishing, не, пока обойдусь без шардинга и репликации, вот если реально будет высокая нагрузка - тогда уже подумаю. В связи с тем что почти все данные будут храниться в БД и большинство запросов - чтение, узким местом будет либо БД либо скорость диска, там можно будет сделать репликацию между парочкой VPS и коннектиться к рандомному mysql серверу из списка. Или анализировать нагрузку и переключать с одного на другой коэфициентом, теория вероятностей и все такое... Пока все не настолько запущено.

У Вас и поиск по основной таблице шустрее будет

Вот это я хотел услышать. Значит, смысл есть

SocFishing
На сайте с 26.09.2013
Offline
118
#4

Не думаю, что будет заметный прирост на таком кол-ве записей. Попытка не пытка конечно или пытка.

Если выборка будет или критерии показа этих записей по времени скажем, то целесообразно оставлять эти индексы, а все остальное, включая текстовку описаний в отдельную таблицу. Тут все же следует плясать от выборки и как будет догружаться описание.

Я писал про то, что если вам на страницу надо выдать скажем все 100к записей с описанием, то само собой это не ускорит процесс, а затормозит его в виду 2х запросов =)

Если описание догружается после клика, то это порождение дополнительного запроса на веб-сервер и БД, что в купе с таким малочисленным описанием не очень будет. Быть может лучшим решением было бы не показывать сразу 1000 записей, а показывать порциями по лимиту с возможностью догрузки.

K
На сайте с 03.06.2015
Offline
45
#5
Metal_Messiah:
и есть поле описания типа TEXT, в котором вряд ли будет больше пары предложений, но местами может быть и много букв.

Поле типа Text оправдано только в записях типа статья, то есть когда текст это главное и текст может быть большим: максимум 65535 байтов, что на длину символа скажем в юникоде кириллицы - делим на 3.

Во всех остальных случаях для текстов применяют нормальные varchar поля с заведомо достаточным количеством букв.

Потому что текст это в сущности блоб https://dev.mysql.com/doc/refman/5.0/en/blob.html с той лишь разницей что драйвер "знает" как трансформировать байты поля типа текст. Следовательно такое блобное поле выпадает из рамок буферизации, требует особого с собой обращения что и влечет дополнительный расход ресурсов.

Короче говоря только некультурные люди втыкают тип text в кортеж о скажем товаре или пользователе, то есть когда в тексте фиксируются описания свойств, а не охрененная телега по истории КПСС.

В статье по ссылке выше оракл советует включать это поле в запрос только в крайних случаях. То есть достаточно его не запрашивать и запрос станет другим.

MYSQL PHP JS HTML CSS SEO TXT США СССР
Metal Messiah
На сайте с 01.08.2010
Offline
163
#6

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий