I am using MySQL 8.0 and there is a slow query on a large table to be optimized.
The table contains 11 million rows of data and it's structure:
CREATE TABLE `ccu` (
`id` bigint NOT NULL,
`app_id` int NOT NULL,
`ccu` int NOT NULL,
`audit_create` datetime NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `ccu_game_create_time_2a10bc69_idx` (`app_id`,`audit_create`) USING BTREE,
KEY `ccu_audit_create_idx` (`audit_create`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
My query is:
SELECT app_id, DATE(audit_create) cal_day, MAX(ccu) pcu, ROUND(AVG(ccu)) id_acu
FROM ccu
WHERE audit_create BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 29 DAY) AND DATE(NOW())
GROUP BY app_id, DATE(audit_create)
The query runs over 2 seconds. I add the condition by between ... and ... to filter useful data.
However, the data stored in audit_create is in format yyyy-MM-dd HH:mm:ss, I have to use the date function but according to the execution plan only the where condition uses index(still has temporary table), the group by clause does not use any index at all.

I have no right to alter the table structre to add a date column. Is it possible to optimize the query to lower the query time?