Схему базы данных прилагаю. У меня серьезные проблемы с производительностью, когда таблица Metrics имеет несколько технологий и параметров из-за длинных SQL-запросов, заполненных соединениями, которые мне нужно сгенерировать для правильного доступа к ним. Рабочий предложил перейти на MongoDB, но я хочу быть уверен, что в MariaDB нет лучшего решения. Образец запроса:
SELECT DISTINCT metric.id, a2.xplotvarvalue, metric.joules, metric.seconds, metadata.data
FROM metric
JOIN concern ON concern.id=metric.idc AND concern.name = 'Security'
JOIN design ON design.id=metric.idd AND design.name = 'Cryptography'
JOIN datatype ON datatype.id=metric.iddt AND datatype.name = 'String'
JOIN operation ON operation.id=metric.ido AND operation.name = 'KeyGeneration'
JOIN technologymetric ON technologymetric.idm=metric.id
JOIN (SELECT idm FROM technologymetric JOIN technology ON technology.id = technologymetric.idt AND technology.name = 'AIAK') AS a0
ON a0.idm = technologymetric.idm
JOIN (SELECT idm FROM technologymetric JOIN technology ON technology.id = technologymetric.idt AND technology.name = 'DSA') AS a1
ON a1.idm = technologymetric.idm
JOIN technology ON technology.id=technologymetric.idt
JOIN parametervaluemetric ON parametervaluemetric.idm=metric.id
JOIN parametervalue ON parametervalue.id=parametervaluemetric.idpv
JOIN (SELECT idm, parametervalue.value AS xplotvarvalue FROM parametervaluemetric
JOIN parametervalue ON parametervalue.id=parametervaluemetric.idpv
JOIN parameter ON parameter.id = parametervalue.idp AND parameter.name = 'KeySize' AND parametervalue.value <= 1024)
AS a2 ON a2.idm = parametervaluemetric.idm JOIN parameter ON parameter.id=parametervalue.idp
JOIN metadata ON metadata.id=metric.idm ORDER BY metadata.data, FIELD('parameter.name','KeySize')
РЕДАКТИРОВАТЬ1: Количество строк в результирующем наборе не определено, обычно 1, но зависит от ЗНАЧЕНИЯ в «И параметрзначение.значение ‹ ЗНАЧЕНИЕ». Набор результатов не влияет на производительность. Если я не использую DISTINCT, набор результатов удваивается (т.е. он возвращает одну и ту же строку два раза). Основное замедление связано с параметрами, с одним все в порядке, если у меня их три для одной и той же метрики, возврат одной строки может занять 3 минуты. Я думаю, что виновником являются две таблицы «многие ко многим» между параметром и метрикой. Мы храним конфигурации систем (например, центр обработки данных, веб-сервер, приложение Android) с их потреблением в джоулях и временем выполнения.
EXPLAIN [query]
, и профилирование запроса с типом ALL также может быть полезно mariadb.com/kb/en/library/show-profile - person Raymond Nijland   schedule 05.02.2018DISTINCT metric.id, a2.xplotvarvalue, metric.joules, metric.seconds, metadata.data
, потому что для разрешения этих данных требуется временная память (может измениться на диск, если данные станут большими). - person Raymond Nijland   schedule 05.02.2018DISTINCT
? Как отметил @RaymondNijland, это недешево. Что ты пытаешься сделать? - person O. Jones   schedule 05.02.2018EXPLAIN
? Кстати, нет никакого волшебства, которое ускоряет выполнение сложных запросов с помощью других технологий СУБД. - person O. Jones   schedule 08.02.2018