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

Форум MySQL

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

 

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

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

тема: Можно ли оптимизировать этот запрос при помощи JOIN
 
 автор: Den*s   (11.08.2015 в 20:52)   письмо автору
 
 

Очень долго отрабатывает запрос

SELECT lot.*, 
                             (SELECT img FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_name,
                            (SELECT folder FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_folder,
                            (SELECT id FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_id,
                            
                            (SELECT name FROM region WHERE region_id = lot.region_id LIMIT 0, 1 ) AS region_name,
                            (SELECT name FROM city WHERE city_id = lot.city_id LIMIT 0, 1 ) AS city_name,
                            
                            (SELECT namePage FROM category WHERE id = lot.idCategory LIMIT 0, 1 ) AS category_name_page,
                            (SELECT name FROM category WHERE id = lot.idCategory LIMIT 0, 1 ) AS category_name,
                            
                            (SELECT namePage FROM category_general WHERE id = lot.idCategoryGeneral LIMIT 0, 1 ) AS gen_category_name_page,
                            (SELECT name     FROM category_general WHERE id = lot.idCategoryGeneral LIMIT 0, 1 ) AS gen_category_name
                        
                            FROM lot ORDER BY dateStart DESC

Подскажите как можно его оптимизировать

До этого был код, который отрабатывал на порядок быстрее, но он ведь с точки зрения оптимизации не правильный

<?
 $result 
mysql_query("SELECT * FROM lot WHERE id_user = '".$user_online['id_user']."' ORDER BY dateStart DESC LIMIT $start$num "); 
 if (
mysql_num_rows($result))
 {
     while(
$mes mysql_fetch_array($result))
     {
         
$query mysql_query("SELECT * FROM lot_images WHERE idGeneral = '{$mes['id']}'  ");
         
$show_img mysql_fetch_assoc($query);
         
         
$query mysql_query("SELECT * FROM region WHERE region_id = '{$mes['region_id']}'  ");
         
$region mysql_fetch_assoc($query);
         
         
$query mysql_query("SELECT * FROM city WHERE city_id = '{$mes['city_id']}'  ");
         
$city mysql_fetch_assoc($query);
         
         
$query mysql_query("SELECT * FROM category WHERE id = '{$mes['idCategory']}'  ");
         
$category mysql_fetch_assoc($query);
         
         
$query mysql_query("SELECT * FROM category_general WHERE id = '{$mes['idCategoryGeneral']}'  ");
         
$category_general mysql_fetch_assoc($query);
         
         ......
     }
 }
?>

  Ответить  
 
 автор: KPETuH   (12.08.2015 в 11:06)   письмо автору
 
   для: Den*s   (11.08.2015 в 20:52)
 

Смотрите в сторону
JOIN

  Ответить  
 
 автор: Den*s   (12.08.2015 в 14:49)   письмо автору
 
   для: KPETuH   (12.08.2015 в 11:06)
 

Вопрос про индексы, если поля, по которым идёт выборка проиндексировать (обычный индекс).
На сколько это увеличит скорость SELECT-ов и на сколько потяжелеет база?

  Ответить  
 
 автор: KPETuH   (12.08.2015 в 15:19)   письмо автору
 
   для: Den*s   (12.08.2015 в 14:49)
 

Кстати не совсем понятна запись
LIMIT 0, 1 

в каждом подзапросе, у вас везде есть больше одного ответа на подзапрос?

  Ответить  
 
 автор: Den*s   (14.08.2015 в 16:51)   письмо автору
 
   для: KPETuH   (12.08.2015 в 15:19)
 

Больше одного ответа только в картинках

(SELECT img FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_name,
                            (SELECT folder FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_folder,
                            (SELECT id FROM lot_images WHERE idGeneral = lot.id LIMIT 0, 1 ) AS img_id, 

остальные возвращают только один, лимиты пошли мусором

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

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