Я оптимизирую свой запрос, используя SQLite3.Есть несколько функций «CASE WHEN», «GROUP BY», «COUNT».
НО запрос ОЧЕНЬ медленный (около 14 секунд)
Вот информация о моем файле базы данных.
- размер: около 2 ГБ
- строк: около 3 миллионов
- столбцов: 55 столбцов
Что я могу сделатьдля оптимизации производительности запроса?
Есть ли лучший запрос для результата?
Пожалуйста, помогите мне TT Спасибо.
select
case
when score = 100 then 'A'
when score < 100 and score >= 40 then 'B'
else 'C'
end as range,
count(*) as count
from grade_info
where type < 9 and
(date >= '2019-07-09 00:00:00' and date <= '2019-07-09 23:59:59') and
is_new = 1
group by
case
when score = 100 then 'A'
when score < 100 and score >= 40 then 'B'
else 'C'
end;
Таблица grade_info
имеет несколько столбцовindex: (type, date, is_new, score)
Условия для столбцов (тип, дата, is_new) всегда используются в этом запросе.Вот результат плана запроса объяснения.
selectid | order | from | detail
--------------------------------
0 0 0 SEARCH TABLE grade_info USING INDEX idx_03 (type<?) (~2777 rows)
0 0 0 USE TEMP B-TREE FOR GROUP BY
, и я хочу получить такой результат.
A | 5124
B | 124
C | 12354