Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2015, 17:39   #1
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию Оптимизация

Написал вот такое обращение к базе MySql:
PHP код:
SELECT (SELECT SUM(kol_zap) AS `urFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND `lin_rab`='1') `ur`
, (
SELECT SUM(kol_zap) AS `soodFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND (`lin_rab`='13' OR `lin_rab`='14')) `sood`
, (
SELECT SUM(kol_zap) AS `exterFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND (`okras`='9' OR `okras`='10')) `exter`
, (
SELECT SUM(kol_zap) AS `bepFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND `lin_rab`='2') `bep`
, (
SELECT SUM(kol_zap) AS `nonFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND `okras`='3') `non`
, (
SELECT SUM(kol_zap) AS `ooopFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND `lin_rab`='12') `ooop`
, (
SELECT SUM(kol_zap) AS `inoeFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' AND (`lin_rab`='3' OR `lin_rab`='4' OR `lin_rab`='5' OR `lin_rab`='6' OR `lin_rab`='7' OR `lin_rab`='8' OR `lin_rab`='9' OR `lin_rab`='10' OR `lin_rab`='11')) `inoe`
, (
SELECT SUM(kol_zap) AS `allFROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ') `all
Возможно ли данный запрос оптимизировать, чтобы он работал быстрей и каким образом?
maksikus вне форума Ответить с цитированием
Старый 30.01.2015, 17:51   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

case есть же:
SUM(CASE WHEN lin_rab`='1' THEN KOL_ZAP ELSE 0 END) ur1
общая часть условия в единственный ON или WHERE. И ни каких вложенных запросов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2015, 17:55   #3
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
case есть же:
SUM(CASE WHEN lin_rab`='1' THEN KOL_ZAP ELSE 0 END) ur1
общая часть условия в единственный ON или WHERE. И ни каких вложенных запросов
Сделал следующий запрос:
PHP код:
SELECT SUM(CASE WHEN `lin_rab`='1' THEN `kol_zap` ELSE 0 END) `ur`
SUM(CASE WHEN `lin_rab`='13' OR `lin_rab`='14' THEN `kol_zap` ELSE 0 END) `sood`
SUM(CASE WHEN `okras`='9' OR `okras`='10' THEN `kol_zap` ELSE 0 END) `exter`
SUM(CASE WHEN `lin_rab`='2' THEN `kol_zap` ELSE 0 END) `bep`
SUM(CASE WHEN `okras`='3' THEN `kol_zap` ELSE 0 END) `non`
SUM(CASE WHEN `lin_rab`='12' THEN `kol_zap` ELSE 0 END) `ooop`
SUM(CASE WHEN `lin_rab`='3' OR `lin_rab`='4' OR `lin_rab`='5' OR `lin_rab`='6' OR `lin_rab`='7' OR `lin_rab`='8' OR `lin_rab`='9' OR `lin_rab`='10' OR `lin_rab`='11' THEN `kol_zap` ELSE 0 END) `inoe`
SUM(CASE WHEN `lin_rabTHEN `kol_zap` ELSE 0 END) `all`
FROM `regbaseINNER JOIN `iniciatorON `iniciator`.`idi`=`regbase`.`podrWHERE `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ' 
Но время обработки запроса осталось прежним, быстрее никак нельзя?

Последний раз редактировалось maksikus; 30.01.2015 в 18:58.
maksikus вне форума Ответить с цитированием
Старый 30.01.2015, 21:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если не секрет, что запрос должен делать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2015, 21:41   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вместо двух последних сделал бы
Код:
, SUM(kol_zap) AS `all`
FROM `regbase` INNER JOIN `iniciator` ON `iniciator`.`idi`=`regbase`.`podr` AND `zap`='1' AND `otmetka`='1' AND `organ1`='УТ/ЛУ'
и все OR заменил бы на IN
А дальше смотреть индексы таблиц
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.02.2015, 12:19   #6
maksikus
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если не секрет, что запрос должен делать?
Секрет...


Сделал переиндексацию таблиц, скорость обработки запроса увеличилась.
OR на IN менять не стал ибо итак норм работает...
maksikus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация kuba1981 PHP 2 16.02.2013 16:32
Оптимизация Alex Cones Общие вопросы Delphi 9 07.07.2010 08:47
Оптимизация If + Or Alex Cones Общие вопросы Delphi 6 09.06.2010 01:42
Оптимизация Viper1287 Операционные системы общие вопросы 7 13.09.2009 15:33
Оптимизация Flangini Microsoft Office Excel 5 11.06.2009 11:48