Вот есть таблица с юзерами. там 23 поля. стандартные поля типа имени, мейла, асику и т.д. как у всех. А мне надо взять оттуда некоторые, на сумму 18 (20) полей. Опять таки стандартные поля типа мейла, асику, кол-ва постов и т.д. Что лучше и быстрее и проще для железок. SELECT * FROM tbl WHERE user_id=... или SELECT user_email, user_icq и далее еще 20 пунктов. ? Какой запрос будет быстрее?
ну дай бох будет в будущем тормозить. ну а всетаки? судя по phpmyadmin, SELECT * идет 0.0003секи, а SELECT все но по отдельности идет 0.0015 секоф. Значит надо пологать что для базы легче выделить все, чем выделять что то отдельно. А вот для пхп что легче?
Тот в котором перечисленно мимнимальное количество полей для выборки из БД. Что тебе мешает сделать в цикле 20 000 запросов на insert А потом попробовать обоими способами.
я даже не задумываюсь над таким. как показывает практика тормоза идут совсем в других местах. например при множественных выборках.
Код (Text): select a.*, b.*, c.* from t1 a, t2 b, t3 c where /*очень много всего*/ спокойно представим в каждой таблице по 20 000 записей. И посмотрим стоит задумываться над такими вещами или нет. Diver, на мой взгляд в данном случае 440hz не прав. Правильно делаешь что задаешься вопросами сейчас, когда реализуешь всю логику и узнаешь что у тебя все тормозит из-за базы очень сильно пожалеешь что не задумался об оптимизации на стадии проектирования/начала работ.
vb тормоза между * и a,b,c не тот случай когда нужно хлопотать. по крайне мере сейчас, а вот с проектированием - тут да. нужно очень подумать прежде чем все делать.
а если у меня 90% таких запросов. что их зря сохатить? далее. лучше делать один запрос в несколько таблиц (в 2-3) или 2-3 запроса отдельно?
Смотреть надо по ситуации - а именно на предполагаемые размеры таблиц и индексы полей. Если ты знаешь что таблицы t1, t2, t3 есть/будут большие - мое мнение - однозначно несколько запросов. например ты делаешь Код (Text): FROM t1 LEFT JOIN t2 ON t2.id=t1.id Пусть записей в обоих таблицах по 20 000. В данном примере мы получаем - что прежде чем выдать результат mysql должен сделать пробег по 20 000 строк таблицы t1 и на каждой итерации определить среди 20 000 записей таблицы t2 соответствующую запись. Конечно при индексе полей связи все ускорится, но все равно ИМХО не супер. При таком раскладе я сделал бы два запроса, которые гарантировывали бы мне, что пробег по записям не превысит 40 000 итераций. А выбирать как я написал тремя постами выше, Код (Text): ... from t1, t2, t3 это по-моему вообще застрел. С другой стороны, если ты знаешь что таблицы будут относительно не большими, то лучше использовать JOIN чем два маленьких запроса (главное не переборщи с WHERE - это касается любого запроса). Использование JOIN на относительно небольших таблицах приведет к тому что ты можешь очень сильно сэкономить время на обращении к серверу БД. На самом деле если ты обратишь внимание то на маленьких запросах - которые могут вообще ничего не значить и выполняться за 0.00000000001 секунды твой php потратит значительно большее время за счет того, что каждое обращение к какому либо серверу - это накладные расходы времени. Как определить относительно большая или маленькая таблица можно только путем тестов на том сервере на котором ты намерен использовать в будущем свои запросы. p.s. и еще, если ты делаешь 20 раз Код (Text): SELECT z.id FROM t1 a LEFT JOIN t1 b ON b.parent=a.id LEFT JOIN t3 c ON c.parent=b.id /*.... и.т.д*/ LEFT JOIN z.parent=x.id WHERE a.id = 10 то один такой запрос будет выполняться быстрее чем 20 маленьких.... На самом деле почитай лучше вот тут, http://www.mysql.ru/docs/optimal.html http://www.mysql.ru/docs/man/MySQL_Optimisation.html все равно никто тебе в полной мере не сможет все объяснить на форуме.... а то получится все равно что изучение английского по телефону.