Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: эффективность и скорость выполнения запроса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
lamozavrik
Отправлено: 28 Февраля, 2012 - 18:37:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011  


Помог: 4 раз(а)




Всем привет! Кто может подсказать, на сколько эффективен или не эффективен (медленный, ресурсоемкий и т.д.) вот такой запрос:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT    g.id,
  3.                IF(g.cat_id = 0, 'не определена', (SELECT title FROM category WHERE id = g.cat_id)) AS cat_title,
  4.                 g.part,
  5.                 g.title,
  6.                 g.count,
  7.                 g.price,
  8.                 g.count * g.price AS sum,
  9.                 g.archive                                
  10.                                         FROM goods AS g
  11.                                         WHERE g.archive IN ($goods) ORDER BY archive, part
  12.  


Заранее благодарен


-----
Ударим крепким сном по мукам совести!
 
 Top
ugin_root
Отправлено: 28 Февраля, 2012 - 18:52:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




lamozavrik
запрос правильный. если нет другого выбора чем IF и внутри запрос то делай его. Была подобная ситуация когда нужно было делать запрос к таблице примерно для 500 записей из 10000, left outer join выполнялся очень долго (т.к было 10000 записей), а такой вариант выполнялся намного быстрее. Если ситуация похожа то делай подзапрос внутри IF. Но попробуй сделать то-же самое с left outher join, выбирай то что быстрее работает

(Отредактировано автором: 29 Февраля, 2012 - 14:23:34)

 
 Top
lamozavrik
Отправлено: 28 Февраля, 2012 - 19:16:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011  


Помог: 4 раз(а)




Я пробовал с INNER JOIN, но дело в том, что в INNER JOIN нужно указать условие ON к примеру id категории = id категории в таблице товаров. А ситуация такая, что при удалении категории все товары, что находятся в ней переносятся в архив, а поле id категории в товарах, которые были в удаляемой категории меняется на 0. Так вот в случае с INNER JOIN поля, в которых id категории = 0 не выбираются. Вот решил проблему так, но не знаю на сколько правильно )


-----
Ударим крепким сном по мукам совести!
 
 Top
EuGen Администратор
Отправлено: 29 Февраля, 2012 - 08:08:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Используйте EXPLAIN. Он покажет, что именно будет делать БД.
http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]/en/explain[dot]html


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
lamozavrik
Отправлено: 29 Февраля, 2012 - 09:00:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011  


Помог: 4 раз(а)




EuGen, спасибо за подсказку =))
Может еще кто подскажет, почему при условии WHERE col = 1 и ндекс используется, а при WHERE col IN (1, 2) не используется? Можно это как то исправить?


-----
Ударим крепким сном по мукам совести!
 
 Top
EuGen Администратор
Отправлено: 29 Февраля, 2012 - 10:00:47
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
lamozavrik
Отправлено: 29 Февраля, 2012 - 11:19:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 161
Дата рег-ции: Дек. 2011  


Помог: 4 раз(а)




EuGen, спасибо )


-----
Ударим крепким сном по мукам совести!
 
 Top
ugin_root
Отправлено: 29 Февраля, 2012 - 14:24:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




lamozavrik
LEFT OUTER JOIN != LEFT JOIN
с той проблемой что вы описали он вам как раз поможет
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB