Мы имеем довольно большой MySql Innodb таблицу со следующим родом статистики,MySql Диапазон данных оптимизация запросов
Rows - 8277943+ Server Ram - 128 Gb
Avg row Length - 575 Processor - Deca Core Intel
Data Size - 4.4 GB Overall Database Size - 500Gb
Проблема заключается у нас есть несколько запросов на этой таблице, и теперь они работают очень медленно, и я бегу из идей для оптимизации. Например, некоторые запросы приведены ниже,
select TIMESTAMPDIFF(SECOND,w.msgCreatedOn,now()) as rnge
from t_xxx_dtls w
where w.profileId=17901
and w.orgId=1448
and w.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59'
and w.currentlyActive=true and w.`action` not in (6,9,17)
and (
w.parentId NOT in (
select CASE WHEN d.parentId IS NOT NULL THEN d.parentId ELSE d.id END as ticketId
from t_xxx_dtls d where d.profileId=17901 and d.orgId=1448 and d.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59' and d.action in (2,4,7)
group by ticketId
)
or (w.parentId is null and w.inReplyId is null)
)
and w.msgId is not null
order by rnge desc
limit 0,1
В то время как у нас есть простые запросы, как один ниже, которые начинают застревать,
select count(*)
from t_xxx_dtls d
where d.actionStartDate BETWEEN '2016-07-27 05:08:00' and '2016-07-27 13:08:59'
Это в соответствии с планом объяснить проверяет очень большое количество записей, как это можно улучшить. Я читаю о разделе, но теперь уверен, что это может помочь.
Просьба показать структуру таблицы. У вас есть указатель на actionStartDate? – rlanvin
Пожалуйста, покажите версию mysql, создайте индексы, базу данных oltp или olap, ... –