powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса
8 сообщений из 8, страница 1 из 1
Оптимизация запроса
    #38763756
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Возможно ли оптимизировать следующий зарос?

Код: 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.
	SELECT 
		v_adnests.name,
		v_adnests.external_id,
		tab3.*
	FROM v_adnests
	JOIN
	(
		SELECT 
			adnest_mapping_composite.adnest_id, 
			adnest_mapping_composite.ratio,
			tab2.*
		FROM adnest_mapping_composite
		JOIN 
		(
			SELECT 
				tab.adnest_id as effective_adnest_id,
				SUM(tab.frequency = 1) AS "1",
				SUM(tab.frequency = 2) AS "2",
				SUM(tab.frequency = 3) AS "3",
				SUM(tab.frequency = 4) AS "4",
				SUM(tab.frequency = 5) AS "5",
				SUM(tab.frequency = 6) AS "6",
				SUM(tab.frequency = 7) AS "7",
				SUM(tab.frequency = 8) AS "8",
				SUM(tab.frequency = 9) AS "9",
				SUM(tab.frequency = 10) AS "10",
				SUM(tab.frequency > 10) AS ">10"
			FROM
			(
				SELECT 
					adnest_id, 
					visitor_id, 
					COUNT(*) AS frequency
				FROM hist_impressions
				INNER JOIN timeslot t ON t.timeslot_id = hist_impressions.timeslot_id
				WHERE start_date BETWEEN @start AND ADDDATE(@start, INTERVAL 7 DAY)
				GROUP BY adnest_id, visitor_id
			) tab
			GROUP BY 
				tab.adnest_id
		) tab2
		ON tab2.effective_adnest_id = adnest_mapping_composite.effective_adnest_id

	) tab3
	ON tab3.adnest_id = v_adnests.adnest_id
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38763984
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0нЗдравствуйте!
Возможно ли оптимизировать следующий зарос?

Код: 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.
	SELECT 
		v_adnests.name,
		v_adnests.external_id,
		tab3.*
	FROM v_adnests
	JOIN
	(
		SELECT 
			adnest_mapping_composite.adnest_id, 
			adnest_mapping_composite.ratio,
			tab2.*
		FROM adnest_mapping_composite
		JOIN 
		(
			SELECT 
				tab.adnest_id as effective_adnest_id,
				SUM(tab.frequency = 1) AS "1",
				SUM(tab.frequency = 2) AS "2",
				SUM(tab.frequency = 3) AS "3",
				SUM(tab.frequency = 4) AS "4",
				SUM(tab.frequency = 5) AS "5",
				SUM(tab.frequency = 6) AS "6",
				SUM(tab.frequency = 7) AS "7",
				SUM(tab.frequency = 8) AS "8",
				SUM(tab.frequency = 9) AS "9",
				SUM(tab.frequency = 10) AS "10",
				SUM(tab.frequency > 10) AS ">10"
			FROM
			(
				SELECT 
					adnest_id, 
					visitor_id, 
					COUNT(*) AS frequency
				FROM hist_impressions
				INNER JOIN timeslot t ON t.timeslot_id = hist_impressions.timeslot_id
				WHERE start_date BETWEEN @start AND ADDDATE(@start, INTERVAL 7 DAY)
				GROUP BY adnest_id, visitor_id
			) tab
			GROUP BY 
				tab.adnest_id
		) tab2
		ON tab2.effective_adnest_id = adnest_mapping_composite.effective_adnest_id

	) tab3
	ON tab3.adnest_id = v_adnests.adnest_id




? ЕХПЛАИН
? скорость
? скорость нужная
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38763989
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас запрос отрабатывает за ~12 минут. Хочется шустрее. Что тут вообще можно оптимизировать?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38764118
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0нСейчас запрос отрабатывает за ~12 минут. Хочется шустрее. Что тут вообще можно оптимизировать?

? EXPLAIN
? скорость нужная
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38764121
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чтоб два раза не вставать:

Замерьте скорость и EXPLAIN подряд всех вложений:
сначала отдельно tab потом tab2 потом tab3 и
ну обший запрос
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38768081
Стас0н
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот explain
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
+----+--------------+--------------------------+--------+---------------------------------+-----------------+---------+--------------------------------------+-----------+---------------------------------+
| id | select_type  | table                    | type   | possible_keys                   | key             | key_len | ref                                  | rows      | Extra                           |
+----+--------------+--------------------------+--------+---------------------------------+-----------------+---------+--------------------------------------+-----------+---------------------------------+
|  1 | PRIMARY      | <derived2>               | ALL    | NULL                            | NULL            | NULL    | NULL                                 |      2102 |                                 |
|  1 | PRIMARY      | <derived5>               | ALL    | NULL                            | NULL            | NULL    | NULL                                 |      3231 | Using where; Using join buffer  |
|  5 | DERIVED      | a                        | ALL    | adnest_FKIndex1,adnest_FKIndex2 | NULL            | NULL    | NULL                                 |      3438 |                                 |
|  5 | DERIVED      | r                        | eq_ref | PRIMARY                         | PRIMARY         | 8       | inv_rtb.a.section_id                 |         1 |                                 |
|  5 | DERIVED      | sz                       | eq_ref | PRIMARY,ad_size_Index           | PRIMARY         | 4       | inv_rtb.a.size_id                    |         1 |                                 |
|  6 | UNION        | s                        | ALL    | PRIMARY                         | NULL            | NULL    | NULL                                 |       200 |                                 |
|  6 | UNION        | a                        | ref    | adnest_FKIndex1,adnest_FKIndex2 | adnest_FKIndex1 | 8       | inv_rtb.s.section_id                 |         2 |                                 |
|  6 | UNION        | sz                       | eq_ref | PRIMARY,ad_size_Index           | PRIMARY         | 4       | inv_rtb.a.size_id                    |         1 |                                 |
| NULL | UNION RESULT | <union5,6>               | ALL    | NULL                            | NULL            | NULL    | NULL                                 |      NULL |                                 |
|  2 | DERIVED      | <derived3>               | ALL    | NULL                            | NULL            | NULL    | NULL                                 |       621 |                                 |
|  2 | DERIVED      | adnest_mapping_composite | ALL    | NULL                            | NULL            | NULL    | NULL                                 |      2693 | Using where; Using join buffer  |
|  3 | DERIVED      | <derived4>               | ALL    | NULL                            | NULL            | NULL    | NULL                                 |   4588376 | Using temporary; Using filesort |
|  4 | DERIVED      | hist_impressions         | ALL    | hist_impressions_timeslot       | NULL            | NULL    | NULL                                 | 127014138 | Using temporary; Using filesort |
|  4 | DERIVED      | t                        | eq_ref | PRIMARY                         | PRIMARY         | 8       | inv_rtb.hist_impressions.timeslot_id |         1 | Using where                     |
+----+--------------+--------------------------+--------+---------------------------------+-----------------+---------+--------------------------------------+-----------+---------------------------------+



Общее время запроса - 12 минут. Отдельно пока не мерил. Желаемое - чум быстрее тем лучше. Сейчас можно что-то сказать про производительность (без замера по каждой внутренней таблице)?
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38768116
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте индекс для hist_impressions, хотя бы по start_date...
...
Рейтинг: 0 / 0
Оптимизация запроса
    #38768139
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас0н,

в общем случае, плохо везде, где стоит NULL в графе KEY
и большое количество в графе ROWS.
навскидку:

1. сделайте индекс на hist_impressions.start_date

2. не поленитесь, плиз, сделат' отдельные запросы как я попросил

3. для ВСЕХ рассматриваемых запросов выдавайте:
-- полный СКЛ
-- скорост'
-- експлейн

4. для всех таблиц выдайте DESC TABLE abc.

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


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