Антон С.
1316 сообщений
#13 лет назад
Всем привет!
Ситуация следующая: к примеру, есть нужда выбрать из 4 таблиц 5 колонок. в модели есть функция, которая связывает эти таблицы и выберает все колонки ( функция эта писалась для того случая, когда все эти колонки надо было выбрать ).
Теперь же эта функция задействуется в других местах. Есть ли смысл тем или иным образом модернизировать функцию ,чтобы она выбирала только необходимые колонки и все?

Пример:
SELECT * FROM many_cols_table

Но в принципе можно обойтись:
SELECT needed_row_1, needed_row_2 FROM many_cols_table

Есть ли смысл тратить время и силы на переписывание ? Позволит ли это реально что-то сьэкономить?

Контекст: проект высоконагруженый (но те части проекта, про которые сейчас идет речь - не особо дают нагрузку). В высоконагруженной части там все конечно оптимизируется максимально.
Николай М.
1895 сообщений
#13 лет назад
Конечно есть смысл,
проверить очень просто - достаточно посмотреть план запроса в обоих случаях
Антон С.
1316 сообщений
#13 лет назад
MMM_Corp, на данный момент особого прироста не увидел. к сожалению, не имею возможность выложить запросы сюда.
Евгений О.
2989 сообщений
#13 лет назад
Всегда имеет смысл выбирать только нужные поля. Разница по времени будет лишь при больших количествах полей и выборке по блоб полям, но вот нагрузка на сервер данных может отличаться даже при небольших по результату запросах (это сильно зависит какие конкретно манипуляции производит сервер с выборкой).
Кирилл Е.
2817 сообщений
#13 лет назад
Экономия будет заметна, если таблица возвращает оооочень большой массив данных, а количество посетителей оооочень большой..

если количество памяти - не узкое место сервера и ресурс не прожорлив, то особого смысла в этом нет, работает - пусть работает.

По моему, кроме нескольких Мб озу (если таблица огромная), освободит ничего не получиться..

Возможно есть ли смыл писать ид полей в озу и постоянно их где-то там хранить в актуальном состоянии, чтобы при нужде выбирать только десяток нужных строк используя WHERE `id` IN (1,2,..,20,21).. но нам не ясно точно сто за данный где и как потом используются...

Может быть вообще все это можно в отдельный скрипт - и по крону выполнять .. короче инфы для решения конкретной задачи почти нет.. а на счёт производительности выборки всех таблиц, или только нужных - самостоятельно на локальном компе можно потестить, создать таблицу, вписать несколько миллионов строк - и смотреть что делается с памятью и насколько быстро какие запросы выполняются.