Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизация запроса / 8 сообщений из 8, страница 1 из 1
01.10.2014, 17:43:21
    #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
01.10.2014, 20:55:15
    #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
01.10.2014, 21:00:06
    #38763989
Стас0н
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Сейчас запрос отрабатывает за ~12 минут. Хочется шустрее. Что тут вообще можно оптимизировать?
...
Рейтинг: 0 / 0
02.10.2014, 00:45:19
    #38764118
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Стас0нСейчас запрос отрабатывает за ~12 минут. Хочется шустрее. Что тут вообще можно оптимизировать?

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

Замерьте скорость и EXPLAIN подряд всех вложений:
сначала отдельно tab потом tab2 потом tab3 и
ну обший запрос
...
Рейтинг: 0 / 0
06.10.2014, 15:58:53
    #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
06.10.2014, 16:15:26
    #38768116
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Добавьте индекс для hist_impressions, хотя бы по start_date...
...
Рейтинг: 0 / 0
06.10.2014, 16:22:55
    #38768139
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса
Стас0н,

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

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

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

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

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

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


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