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

Форум MySQL

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

 

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

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

тема: Ускорить процесс выборки многотабличного запроса
 
 автор: TetRiska   (27.06.2011 в 12:36)   письмо автору
 
 

Всем привет. Нужна Ваша помощь, чтобы ускорить процесс выборки из БД. Сейчас запрос выполняется 978 мс при лимите в 3 записи :(
SELECT b.`em_package_name`,
        b.`em_package_type`,
        c.`em_produce_name`,
        c.`em_produce_url`,
        c.`em_produce_desc`,
        c.`em_produce_image_sm`,
        c.`em_produce_price_ua`,
        c.`em_produce_price_us`,
        c.`em_produce_price_eu`,
        d.`em_produce_stat_overal`
        FROM `em_company` a
        JOIN `em_package` b ON (b.`em_package_id` = a.`em_package_id`)
        JOIN `em_produce` c ON (c.`em_company_id` = a.`em_company_id`)
        LEFT JOIN `em_produce_stat` d ON (d.`em_produce_id` = c.`em_produce_id`)
        WHERE b.`em_package_updated_produce` = 'y'
        AND a.`em_company_access` = 'y'
        AND a.`em_company_deleted` = 'n'
        AND c.`em_produce_access` = 'y'
        AND c.`em_produce_deleted` = 'n'
        ORDER BY c.`em_produce_data_upd` DESC
        LIMIT 3


В таблице company - 2400 rows, package - 10 rows, produce - 24 000 rows, produce_stat - чуть меньше 24 000 rows.

Запрос данного вида выполняется 78 мс.
SELECT b.`em_package_name`,
        b.`em_package_type`
        FROM `em_company` a
        JOIN `em_package` b ON (b.`em_package_id` = a.`em_package_id`)
        WHERE b.`em_package_updated_produce` = 'y'
        AND a.`em_company_access` = 'y'
        AND a.`em_company_deleted` = 'n'
        LIMIT 3

Запрос следующего вида выполняется 797 мс, почти в 10 раз возросло время.
SELECT b.`em_package_name`,
        b.`em_package_type`,
        c.`em_produce_name`,
        c.`em_produce_url`,
        c.`em_produce_desc`,
        c.`em_produce_image_sm`,
        c.`em_produce_price_ua`,
        c.`em_produce_price_us`,
        c.`em_produce_price_eu`
        FROM `em_company` a
        JOIN `em_package` b ON (b.`em_package_id` = a.`em_package_id`)
        JOIN `em_produce` c ON (c.`em_company_id` = a.`em_company_id`)
        WHERE b.`em_package_updated_produce` = 'y'
        AND a.`em_company_access` = 'y'
        AND a.`em_company_deleted` = 'n'
        AND c.`em_produce_access` = 'y'
        AND c.`em_produce_deleted` = 'n'
        ORDER BY c.`em_produce_data_upd` DESC
        LIMIT 3

Как бы мне сократить это время, а то не хочется, чтобы такой запрос тормозил главную сайта.

  Ответить  
 
 автор: cheops   (27.06.2011 в 12:38)   письмо автору
 
   для: TetRiska   (27.06.2011 в 12:36)
 

Какой размер таблиц (в МБ) и как они проиндексированы?

  Ответить  
 
 автор: TetRiska   (27.06.2011 в 12:46)   письмо автору
 
   для: cheops   (27.06.2011 в 12:38)
 

вопрос снят, пошел иным путем без перелопачивания всех данных в таблицах, время уже радует, спасибо

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

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