Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса\индекс / 9 сообщений из 9, страница 1 из 1
29.10.2015, 14:14:47
    #39090069
st3nka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
Добрый день. Помогите расставить индексы в запросе, либо возможно на платной основе проанализировать БД и оптимизировать. Вот что сыпет в лог медленных запросов. Движок битрикс

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
# Query_time: 2.136017  Lock_time: 0.000244 Rows_sent: 1  Rows_examined: 80728
SET timestamp=1446116925;
SELECT COUNT('x') as C 
			FROM 
			b_iblock B
			INNER JOIN b_lang L ON B.LID=L.LID
			INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
			LEFT JOIN b_iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND  FP0.CODE='FILE_AUDIO'
			LEFT JOIN b_iblock_element_property FPV0 ON FPV0.IBLOCK_PROPERTY_ID = FP0.ID AND FPV0.IBLOCK_ELEMENT_ID = BE.ID

		
			WHERE 1=1 
			AND (
			
				((((BE.IBLOCK_ID = '3'))))
				AND (EXISTS (
						SELECT IBLOCK_ID FROM b_iblock_site WHERE IBLOCK_ID = B.ID
						AND (((SITE_ID='s1')))
					))
				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 ((((BE.ACTIVE_FROM >= '0014-09-29 14:08:43'))))
				AND ((((FPV0.VALUE IS NULL OR length(FPV0.VALUE)<=0))))
			)
			AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
			AND ((
				B.ID IN (
			SELECT IBLOCK_ID
			FROM b_iblock_group IBG
			WHERE IBG.GROUP_ID IN (2)
			AND IBG.PERMISSION >= 'R'
		
				AND (IBG.PERMISSION='X' OR B.ACTIVE='Y')
			)
				OR (B.RIGHTS_MODE = 'E' AND EXISTS (
				SELECT ER.ELEMENT_ID
				FROM b_iblock_element_right ER
				INNER JOIN b_iblock_right IBR ON IBR.ID = ER.RIGHT_ID
				INNER JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = 0
				WHERE ER.ELEMENT_ID = BE.ID
				AND IBR.OP_EREAD = 'Y'
				
			))
			));
...
Рейтинг: 0 / 0
29.10.2015, 14:19:56
    #39090075
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
st3nka,

Показывайте план запроса, версию MySQL, количество записей во всех упомянутых таблицах и результат самого запроса.
...
Рейтинг: 0 / 0
29.10.2015, 14:34:48
    #39090100
st3nka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
miksoftst3nka,

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

Mysql 5.5.14

b_iblock - 19
b_lang - 1
b_iblock_element - 114000
b_iblock_property - 53
b_iblock_element_property - 25000
b_iblock_site - 19
b_iblock_group - 29
b_iblock_element_right - 36000
b_iblock_right - 59
b_user_access - 11000


Результат
C
76613
...
Рейтинг: 0 / 0
29.10.2015, 15:46:01
    #39090222
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
st3nkaРезультат
C
76613Даже не глядя в план и все остальное - уже плохо. По-хорошему - надо перепроектировать сайт, чтобы необходимости в этом запросе вообще не было. Например, подробить искомые сущности на категории и работать только внутри этих категорий. Насколько я помню запросы в Битриксе, это вспомогательный запрос для расчета количества страниц в постраничной навигации. И, получается, что выборка для этой навигации огромная. Чем дальше по страницам будет заходить пользователь или поисковик (а поисковики не утомятся от этого действия), тем медленнее будет отдаваться очередная страница.
...
Рейтинг: 0 / 0
29.10.2015, 19:56:09
    #39090499
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
st3nkaлибо возможно на платной основе проанализировать БД и оптимизировать

Вы какие-нибудь контактные данные откройте в своем профиле, тогда к вам кто-нибудь сможет прислать предложение своих услуг.
Не бойтесь открывать почту, потому что она показывается картинкой и боты её не просканируют.
...
Рейтинг: 0 / 0
31.10.2015, 15:11:06
    #39091738
st3nka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
Lumixst3nkaлибо возможно на платной основе проанализировать БД и оптимизировать

Вы какие-нибудь контактные данные откройте в своем профиле, тогда к вам кто-нибудь сможет прислать предложение своих услуг.
Не бойтесь открывать почту, потому что она показывается картинкой и боты её не просканируют.

Открыл. Благодарю за пояснения
...
Рейтинг: 0 / 0
31.10.2015, 15:11:24
    #39091739
st3nka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
miksoftst3nkaРезультат
C
76613Даже не глядя в план и все остальное - уже плохо. По-хорошему - надо перепроектировать сайт, чтобы необходимости в этом запросе вообще не было. Например, подробить искомые сущности на категории и работать только внутри этих категорий. Насколько я помню запросы в Битриксе, это вспомогательный запрос для расчета количества страниц в постраничной навигации. И, получается, что выборка для этой навигации огромная. Чем дальше по страницам будет заходить пользователь или поисковик (а поисковики не утомятся от этого действия), тем медленнее будет отдаваться очередная страница.

Спасибо за ответ.
...
Рейтинг: 0 / 0
02.11.2015, 09:13:45
    #39092383
st3nka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
Вот ещё запрос вылез. И той же серии?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
# Query_time: 2.659135  Lock_time: 0.000404 Rows_sent: 20  Rows_examined: 157664
SET timestamp=1446443715;
SELECT  BE.DETAIL_TEXT as DETAIL_TEXT,BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.NAME as NAME,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as ACTIVE_FROM,DATE_FORMAT(BE.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,B.LIST_PAGE_URL as LIST_PAGE_URL,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.PREVIEW_PICTURE as PREVIEW_PICTURE,L.DIR as LANG_DIR,BE.SORT as SORT,BE.CODE as CODE,BE.XML_ID as EXTERNAL_ID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.XML_ID as IBLOCK_EXTERNAL_ID,B.LID as LID
			FROM 
			b_iblock B
			INNER JOIN b_lang L ON B.LID=L.LID
			INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
			LEFT JOIN b_iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND  FP0.CODE='FILE_AUDIO'
			LEFT JOIN b_iblock_element_property FPV0 ON FPV0.IBLOCK_PROPERTY_ID = FP0.ID AND FPV0.IBLOCK_ELEMENT_ID = BE.ID

		
			WHERE 1=1 
			AND (
			
				((((BE.IBLOCK_ID = '3'))))
				AND (EXISTS (
						SELECT IBLOCK_ID FROM b_iblock_site WHERE IBLOCK_ID = B.ID
						AND (((SITE_ID='s1')))
					))
				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 ((((BE.ACTIVE_FROM >= '0008-10-03 08:55:10'))))
				AND ((((FPV0.VALUE IS NULL OR length(FPV0.VALUE)<=0))))
			)
			AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))
			AND ((
				B.ID IN (
			SELECT IBLOCK_ID
			FROM b_iblock_group IBG
			WHERE IBG.GROUP_ID IN (2)
			AND IBG.PERMISSION >= 'R'
		
				AND (IBG.PERMISSION='X' OR B.ACTIVE='Y')
			)
				OR (B.RIGHTS_MODE = 'E' AND EXISTS (
				SELECT ER.ELEMENT_ID
				FROM b_iblock_element_right ER
				INNER JOIN b_iblock_right IBR ON IBR.ID = ER.RIGHT_ID
				INNER JOIN b_user_access UA ON UA.ACCESS_CODE = IBR.GROUP_CODE AND UA.USER_ID = 0
				WHERE ER.ELEMENT_ID = BE.ID
				AND IBR.OP_EREAD = 'Y'
				
			))
			))
			
		 ORDER BY BE.ACTIVE_FROM desc ,BE.SORT asc ,BE.ID desc  LIMIT 0, 20;
...
Рейтинг: 0 / 0
02.11.2015, 13:39:11
    #39092697
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса\индекс
st3nkaВот ещё запрос вылез. И той же серии?Судя по вот этому:
st3nka
Код: sql
1.
Rows_examined: 157664

- да.
Но, на всякий случай, выполните без LIMIT-а и посмотрите сколько записей возвращается.

Кто у вас сайт проектирует (не разрабатывает, а именно проектирует) - обсудите с ним, как избавиться от этой выборки.

И, кстати, у битрикса есть свой инструмент для записи вызываемых запросов. Им пользоваться удобнее, т.к. видно какой хинт и какой компонент вызвали этот запрос.
Бывают случаи, когда не то что запрос или компонент, а вся страница не нужна.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса\индекс / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]