Я это query-mysql - Как улучшить ситуацию при работе?
SELECT * FROM alerts a
INNER JOIN alerts_account aa ON a.alert_id=aa.alert_id
WHERE aa.account_id=638
AND a.type IN(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17)
AND CASE WHEN (type = 11 OR type = 13 OR type = 16 OR type = 17)
THEN (is_acknowledged = 0) AND (TIMESTAMPDIFF(HOUR, time, utc_timestamp()) <= 4)
ELSE 1=1
END order by a.alert_id desc limit 10
Моя таблица миллионы записей и его в TIMESTAMPDIFF(HOUR, time, utc_timestamp())
, что это замедляет запрос? Это занимает более 10 секунд. Как я могу улучшить производительность в этом случае. Должен ли я использовать CASE здесь?
EDIT:
оповещения
alert_id | type | time | details| patient_account_id
1 | 1 | 2014-10-22 05:43:45 | 2015 | 234
2 | 5 | 2014-10-22 06:21:23 | 2014 | 345
3 | 12 | 2014-10-22 14:30:23 | 2016 | 456
alert_account
alerts_account_id | alert_id |account_id| is_poped_up| is_acknowledged
1 | 1 |234 | 0 | 0
2 | 2 |345 | 1 | 1
3 | 3 |456 | 1 | 1
оповещает
alerts_account
Удалить ваш случай, когда, в случае, когда предложение where не рекомендуется. –
показывают обе схемы таблиц с индексами и предупреждениями Таблица подсчета строк с типом состояния в (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17) и число столбцов таблицы warn_account с условием account_id = 638 ... –
@ ZafarMalik см. Мое редактирование – HeisenBerg