У меня есть одна таблица, имеющая почти 90 столбцов, и использующая Range Range.Эта таблица содержит почти 50 лаков записей.Когда в то время я использовал GROUP BY
в Query, он показывает «использование временного» и «filesort» в операторе объяснения.
Запрос:
SELECT
subscribe_time * 0.000001 AS start_date,
subscribe_time * 0.000001 AS end_date,
(
IFNULL(
ROUND(
SUM(
CASE WHEN(
subscribe_duration > 20000 AND subscribe_status = '1'
) THEN 1 ELSE 0
END
) /(
SUM(
CASE WHEN(subscribe_status = '1') THEN 1 ELSE 0
END
)
) * 100,
2
),
0
)
) AS subscribe_avg
FROM
tbl_subscription a
WHERE
1 AND subscribe_time > 0 AND subscribe_time BETWEEN "1525113000000000" AND "1524680999999999"
GROUP BY
EXTRACT(
YEAR
FROM
FROM_UNIXTIME(subscribe_time * 0.000001)
),
EXTRACT(
MONTH
FROM
FROM_UNIXTIME(subscribe_time * 0.000001)
),
EXTRACT(
WEEK
FROM
FROM_UNIXTIME(subscribe_time * 0.000001)
),
EXTRACT(
DAY
FROM
FROM_UNIXTIME(subscribe_time * 0.000001)
),
sub_user,
subscribe_ip,
subscribe_zone,
subscribe_approval
Индексирование уже задано для field1.field1 не наш ПК.В общей сложности 5 столбцов индексации.
Когда я пишу GROUP BY
запрос занимает почти 43 секунды для выполнения.и когда я удаляю GROUP BY
в то время, это занимает 0,27 сек.
Также, когда мы наконец напишем «ORDER BY NULL
», сортировка файлов будет удалена.Но я не хочу использовать ORDER BY
в своем запросе.Как сократить время выполнения запроса?
Кроме того, я также пытался извлечь данные из одного раздела, но запрос все еще занимает то же время.Запрос на выборку данных из одного раздела:
SELECT field1, field2 FROM TABLE_NAME PARTITION(p1) WHERE 1 AND
field1='SOME_VALUE' GROUP BY field1;
Дайте несколько советов по сокращению времени выполнения запроса.