Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > выборка из большых таблиц


Автор: YuKo 27.4.2011, 12:48
Здравствуйте.
Запрос
Код

SELECT * FROM `tab1` 
left join `tab2` 
on
`tab1`.`kod1`=`tab2`.`kod2`
left join `tab3`
on
`tab1`.`kod11`=`tab3`.`kod3`
left join `tab4`
on
`tab1`.`kod111`=`tab4`.`kod4`  
order by(`id`)

В таблице tab1 около 20 тис записей, tab2 около 20 тис записей, tab3,4 около 5 записей
Если запрос прогнать на mysql то выполняется около 6 минут
вобще мне нужно просто количество строк общей таблицы
если $num_rows = mysql_num_rows($sql); будет ли этот запрос выполняться так же долго?  если да то помогите оптимизировать запрос

Автор: YuKo 27.4.2011, 13:19
И еще все таблицы в MyISAM возможно ли что эфективней и быстрей будет работать
Код

$result = mysql_query("SELECT count(*) FROM `tab1` 
left join `tab2` 
on
`tab1`.`kod1`=`tab2`.`kod2`
left join `tab3`
on
`tab1`.`kod11`=`tab3`.`kod3`
left join `tab4`
on
`tab1`.`kod111`=`tab4`.`kod4`  
 ");
$row1 = mysql_fetch_row($result);
  $total = $row1[0];

?????

Автор: solenko 27.4.2011, 14:12
Цитата(YuKo @  27.4.2011,  12:19 Найти цитируемый пост)
И еще все таблицы в MyISAM возможно ли что эфективней и быстрей будет работать

Вне зависимости от engine -- эффективнее.

Код

SELECT count(*) FROM `tab1` 
left join `tab2` 
on
`tab1`.`kod1`=`tab2`.`kod2`
left join `tab3`
on
`tab1`.`kod11`=`tab3`.`kod3`
left join `tab4`
on
`tab1`.`kod111`=`tab4`.`kod4`  

Вам точно нужен LEFT JOIN, или таки можно INNER?
Индексы по полям для join есть?

Автор: YuKo 27.4.2011, 14:30
solenko, Можно Inner, это повысит скорость?

Автор: solenko 27.4.2011, 18:22
скорее всего да. Но вообще-то, когда речь идет о оптимизации запросов, то это
1. не в этот раздел, а в базы
2. нужно приводить SHOW CREATE TABLE и EXPLAIN запроса

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)