![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
к примеру есть таблица companies а также связанные по company_id - labels, peoples и др. В связаных табл. может быть несколько записей по каждой компании.
Что будет быстрее: 1) выбрать нужные компании c LEFT JOIN по всем связанным табл. а потом пройтись по массиву и привести в нормальный вид. 2) достать все компании. пройтись циклом и по каждой компании и достать все соответсвующие записи в связанных таблицах. |
|||
|
||||
| Mavrun |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 25.11.2007 Репутация: 2 Всего: 13 |
Первое быстрее. Чем меньше обращений к БД, тем быстрее должно работать.
Вообще советую почитать статью по оптимизации SQL запросов http://shublog.ru/mysql/kak-optimizirovat-sql-zaprosy/ |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
в общем решил 1 вариант использовать, темболее что в связаных таблицах не много записей.
Mavrun, спасибо за статейку |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
Первый вариант не катит!
Если выбирать все записи, то может 1-й вариант пойдет. Но мне нужно не все, а выбранные по LIMIT. А т.к. используются LEFT JOIN-ы, то нужно группировать, соответсвенно доставать все записи, что по времени занимает(около штуки компаний) 2.25117588043 сек. Это сообщение отредактировал(а) CruorVult - 12.7.2010, 11:47 |
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
итого при выборке около 1000 компаний:
1) 2.21443104744 сек - выбор всех: 2.22750496864 сек - GROUP + LIMIT 10 2) 3.10412287712 сек - выбор всех: 0.0608060359955 сек - LIMIT 10 |
|||
|
||||
| Wolf1994 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: 2 Всего: 29 |
3. достать все компании. пройтись циклом и по каждой компании и достать все соответсвующие записи в связанных таблицах. Выбрать одним запросом по списку идентификаторов - `company_id` IN (1,2...) - данные из связанных таблиц.
|
|||
|
||||
| CruorVult |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 868 Регистрация: 24.9.2008 Где: г.Киев, Украина Репутация: 1 Всего: 28 |
Хм.. я ведь с начала хотел так сделать, потом чет с головы вылетело Это сообщение отредактировал(а) CruorVult - 13.7.2010, 09:23 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |