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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Запрос выполняется 14 секунд..это очень долго..
nikoshot
Отправлено: 19 Сентября, 2013 - 11:58:44
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Я не очень силен в запросах...но может кто видит тут что - то , что может ускорить работу....Очень буду благодарен)))
Вот сам запрос....

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT  DISTINCT  B.DETAIL_PAGE_URL  AS  DETAIL_PAGE_URL
  2.        ,BE.NAME  AS  NAME
  3.        ,BE.IBLOCK_ID  AS  IBLOCK_ID
  4.        ,BE.ID  AS  ID
  5.        ,  FPV0.VALUE  AS  PROPERTY_CML2_ARTICLE_VALUE
  6.        ,  FPV0.ID  AS  PROPERTY_CML2_ARTICLE_VALUE_ID
  7.        ,  FPV1.VALUE  AS  PROPERTY_PICTURE_BREND_VALUE
  8.        ,  FPV1.ID  AS  PROPERTY_PICTURE_BREND_VALUE_ID
  9.        ,L.DIR  AS  LANG_DIR
  10.        ,BE.SORT  AS  SORT
  11.        ,BE.CODE  AS  CODE
  12.        ,BE.XML_ID  AS  EXTERNAL_ID
  13.        ,BE.IBLOCK_SECTION_ID  AS  IBLOCK_SECTION_ID
  14.        ,B.IBLOCK_TYPE_ID  AS  IBLOCK_TYPE_ID
  15.        ,B.CODE  AS  IBLOCK_CODE
  16.        ,B.XML_ID  AS  IBLOCK_EXTERNAL_ID
  17.        ,B.LID  AS  LID
  18. FROM
  19. b_iblock  B
  20. INNER  JOIN  b_lang  L  ON  B.LID=L.LID
  21. INNER  JOIN  b_iblock_element  BE  ON  BE.IBLOCK_ID  =  B.ID
  22. LEFT  JOIN  b_iblock_property  FP0  ON  FP0.IBLOCK_ID  =  B.ID  AND  FP0.CODE='CML2_ARTICLE'
  23. LEFT  JOIN  b_iblock_property  FP1  ON  FP1.IBLOCK_ID  =  B.ID  AND  FP1.CODE='PICTURE_BREND'
  24. INNER  JOIN  b_iblock_property  FP2  ON  FP2.IBLOCK_ID  =  B.ID  AND  FP2.CODE='SECTION'
  25. LEFT  JOIN  b_iblock_element_property  FPV0  ON  FPV0.IBLOCK_PROPERTY_ID  =  FP0.ID  AND  FPV0.IBLOCK_ELEMENT_ID  =  BE.ID
  26. LEFT  JOIN  b_iblock_element_property  FPV1  ON  FPV1.IBLOCK_PROPERTY_ID  =  FP1.ID  AND  FPV1.IBLOCK_ELEMENT_ID  =  BE.ID
  27. INNER  JOIN  b_iblock_element_property  FPV2  ON  FPV2.IBLOCK_PROPERTY_ID  =  FP2.ID  AND  FPV2.IBLOCK_ELEMENT_ID  =  BE.ID
  28. WHERE
  29. 1=1
  30.        AND  (  ((((BE.ACTIVE='Y'))))  AND  (((BE.ACTIVE_TO  >=  now()  OR  BE.ACTIVE_TO  IS  NULL)  AND  (BE.ACTIVE_FROM  <=  now()  OR  BE.ACTIVE_FROM  IS  NULL)))  AND  ((((FPV2.VALUE  =  '13481'))))  )
  31.        AND  (((BE.WF_STATUS_ID=1  AND  BE.WF_PARENT_ELEMENT_ID  IS  NULL)))
  32. ORDER  BY
  33. BE.SORT  ASC


Отредактировано модератором: Мелкий, 19 Сентября, 2013 - 12:00:46
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 12:02:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




explain давайте.


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 12:06:22
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
explain давайте

Подскажи как правильно его прописать?
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 12:14:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




CODE (SQL):
скопировать код в буфер обмена
  1. EXPLAIN ваш запрос


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 12:31:41
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. EXPLAIN ваш запрос

Прикреплено изображение (Нажмите для увеличения)
explain 1 часть.jpg
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 12:32:46
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Вот вторая часть!
Прикреплено изображение (Нажмите для увеличения)
explain 2 часть.jpg
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 12:48:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




explain неплох.
Какие есть индексы в таблице b_iblock_element?


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 12:51:20
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
explain неплох.
Какие есть индексы в таблице b_iblock_element?

А как глянуть?
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 12:57:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




explain откуда? phpmyadmin? На вкладке структуры таблицы есть табличка индексов.

В общем случае:
CODE (SQL):
скопировать код в буфер обмена
  1. SHOW INDEX IN b_iblock_element;


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 13:06:06
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
explain откуда? phpmyadmin? На вкладке структуры таблицы есть табличка индексов.

В общем случае:
CODE (SQL):
скопировать код в буфер обмена
  1. SHOW INDEX IN b_iblock_element;

explain не из phpmyadmin...
Это из админки сайта...
на тех первых mcrhby itnf[ есть какие то индексы и вот я сделал новый скрин шет по твоему запросу...
Прикреплено изображение (Нажмите для увеличения)
index.jpg
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 13:40:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Попробуйте добавить вот такой индекс:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE INDEX idx_active_status_parent ON b_iblock_element (ACTIVE, WF_STATUS_ID, WF_PARENT_ELEMENT_ID)


Таблица у вас, видимо, довольно увесистая, так что индекс может создаваться продолжительное время.
Как индекс создастся - прикрепите актуальный explain.


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 13:47:52
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
Попробуйте добавить вот такой индекс:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE INDEX idx_active_status_parent ON b_iblock_element (ACTIVE, WF_STATUS_ID, WF_PARENT_ELEMENT_ID)


Таблица у вас, видимо, довольно увесистая, так что индекс может создаваться продолжительное время.
Как индекс создастся - прикрепите актуальный explain.

а что этот индекс дает???
 
 Top
Мелкий Супермодератор
Отправлено: 19 Сентября, 2013 - 14:14:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




В принципе что даёт или конкретно этот?
Конкретно этот - рассчитываю, что будет релевантен запросу в первом сообщении и, соответственно, уменьшит время обработки за счёт более быстрого отсечения строк, не удовлетворяющих секции where.

В общем - компактное отсортированное множество значений. Позволяет СУБД читать только те строки, которые точно удовлетворяют условию (или его части), вместо того, чтобы читать все строки и отбрасывать ненужные.


-----
PostgreSQL DBA
 
 Top
nikoshot
Отправлено: 19 Сентября, 2013 - 14:28:59
Post Id


Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013  


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




Мелкий пишет:
В принципе что даёт или конкретно этот?
Конкретно этот - рассчитываю, что будет релевантен запросу в первом сообщении и, соответственно, уменьшит время обработки за счёт более быстрого отсечения строк, не удовлетворяющих секции where.

В общем - компактное отсортированное множество значений. Позволяет СУБД читать только те строки, которые точно удовлетворяют условию (или его части), вместо того, чтобы читать все строки и отбрасывать ненужные.

более менее ясно))
Ок!Я тогда когда выполню...сразу отпишусь))
СПС..
 
 Top
serikus
Отправлено: 05 Февраля, 2014 - 18:28:48
Post Id


Новичок


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


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




вопрос к автору, удалось решить проблему?
помог данный индекс? Просто у меня та же проблема с тем же Битриксом. Но только база у меня на порядок больше.

(Отредактировано автором: 05 Февраля, 2014 - 18:36:02)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB