Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: уменьшают ли объединённые запросы нагрузку на базу данных MySQL?
 
 автор: Jaroslav   (17.02.2011 в 23:27)   письмо автору
 
 

Вопрос простой.

Уменьшают ли объединённые запросы нагрузку на базу данных MySQL?
Быстрее ли будут выполняться запросы?
Стоит ли вообще использовать JOIN?

  Ответить  
 
 автор: cheops   (18.02.2011 в 01:06)   письмо автору
 
   для: Jaroslav   (17.02.2011 в 23:27)
 

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

  Ответить  
 
 автор: Jaroslav   (18.02.2011 в 01:23)   письмо автору
 
   для: cheops   (18.02.2011 в 01:06)
 

Например, всегда пишу что-то типа:


  $query_board = "SELECT * FROM table1 WHERE (id='25') ORDER BY id DESC";
  $authorisation_board = mysql_query($query_board);
  $athor_board = mysql_fetch_array($authorisation_board);

  $query_rubrica_reed = "SELECT * FROM  table2  WHERE (name='$athor_board[name]')";
  $authorisation_rubrica_reed = mysql_query($query_rubrica_reed);
  $athor_rubrica_reed = mysql_fetch_array($authorisation_rubrica_reed);


т.е. из одной таблицы что-то выбираю по условию. Затем выбираю из 2-й в соответствие с условиями из первой. JOIN - никогда не использую. Вот думаю, стоит ли их использовать или нет? И как правильно в этом случае его использовать?

  Ответить  
 
 автор: cheops   (18.02.2011 в 01:51)   письмо автору
 
   для: Jaroslav   (18.02.2011 в 01:23)
 

Немножко время обработки можно подскортатить вложнным запросом
SELECT * FROM  table2  
WHERE name = (SELECT name FROM table1 
              WHERE (id='25') 
              ORDER BY id DESC 
              LIMIT 1)

PS Эмпирически считается, что вложенные запросы обрабатываются быстрее, чем два отдельных, а созданные при помощи JOIN быстрее, чем вложенные запросы.

  Ответить  
 
 автор: Jaroslav   (18.02.2011 в 02:31)   письмо автору
 
   для: cheops   (18.02.2011 в 01:51)
 

Спасибо.
А вот другой пример:
Правильно понимаю, что вместо записи:



  $query_board = "SELECT id_aticle, login_aticle FROM  chytalnya_aticle WHERE (login_aticle='neo') ORDER BY id_aticle DESC";
  $authorisation_board = mysql_query($query_board);
  while($reed_works = mysql_fetch_array($authorisation_board)) {   

    $query_rubrica_reed = "SELECT id_users, login_users FROM  chytalnya_users  WHERE (login_users='$reed_works[login_aticle]')";
    $authorisation_rubrica_reed = mysql_query($query_rubrica_reed);
    $athor_board = mysql_fetch_array($authorisation_rubrica_reed); 

    echo '<pre>'.print_r($reed_works, true).'</pre>';
    echo '<pre>'.print_r($athor_board, true).'</pre>';

}




Предпочтительней использовать:


  $query_board = "SELECT chytalnya_aticle.id_aticle, chytalnya_aticle.login_aticle, chytalnya_users.id_users, chytalnya_users.login_users FROM chytalnya_aticle  LEFT JOIN chytalnya_users ON (chytalnya_users.login_users=chytalnya_aticle.login_aticle) WHERE chytalnya_aticle.login_aticle='neo'";
  $authorisation_board = mysql_query($query_board);
  while($athor_board = mysql_fetch_array($authorisation_board)) {   
  echo '<pre>'.print_r($athor_board, true).'</pre>';
  }

  Ответить  
 
 автор: Jaroslav   (18.02.2011 в 05:36)   письмо автору
 
   для: Jaroslav   (18.02.2011 в 02:31)
 

Наверно, это был философский вопрос..
Понятно. Уже потренировался на практике..
По графикам будет видно... ))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования