У меня довольно сложный SQL-запрос, и я не знаю, как сделать это менее сложным. Если я пытаюсь запустить его, он перегружает db. Если я немного упрощу его, я смогу выполнить его, но это займет много времени. Я уверен, что есть гораздо более эффективные способы написания этого запроса, но я понятия не имею, как это сделать. Был бы очень рад, если бы кто-то мог вести меня в правильном направлении!MySQL Query с тремя неиндексированными унифицированными таблицами и перегруженными левыми DB
SELECT master.C_MASTER_ID,
master.C_MASTER_SUMMARY,
master.C_MASTER_START,
master.C_MASTER_END,
master.C_MASTER_LEVEL,
master.C_MASTER_SOURCE,
NULL AS EVT_HAS_Z,
master.C_MASTER_NOTES,
master.C_MASTER_SERVICE,
c2c.CER_CUSTOMER
FROM `C_MASTER` master
LEFT JOIN `c2customer` c2c ON c2c.CER_ID = master.C_MASTER_ID
WHERE
master.C_MASTER_END >= NOW()
AND master.C_MASTER_START >= DATE_SUB(NOW(), INTERVAL 21 DAY)
UNION ALL
SELECT EVT_ID AS C_MASTER_ID,
EVT_SUMMARY,
EVT_START_DATE,
EVT_END_DATE,
NULL AS C_MASTER_LEVEL,
NULL AS C_MASTER_SOURCE,
EVT_HAS_Z,
NULL AS C_MASTER_NOTES,
NULL AS C_MASTER_SERVICE,
NULL AS CER_CUSTOMER
FROM C_event
WHERE EVT_end_date >= NOW()
UNION ALL
SELECT 'WHISPER' AS C_MASTER_CHANGE_ID,
WISP_SUMMARY,
WISP_START_DATE,
WISP_END_DATE,
NULL AS C_MASTER_LEVEL,
NULL AS C_MASTER_SOURCE,
NULL AS EVT_HAS_Z,
NULL AS C_MASTER_NOTES,
NULL AS C_MASTER_SERVICE,
NULL AS CER_CUSTOMER
FROM C_wispering
WHERE WISP_END_DATE >= NOW()
Это немного упрощенная версия моего запроса, так как otherwhise было бы вряд ли для управляемым с просьбой о помощи поста.
Какое количество рядов поступает из базы данных? Каковы ваши индексы? на каких полях и т. д.? – Tikkes
@Tikkes примерно 6000 строк примерно. У меня только C_MASTER_ID и CER_ID проиндексированы. Я был неохотно с индексами, потому что я просто не знаю много об этом. Есть ли недостатки, чтобы индексировать больше полей? – sardine
В этом случае вам стоит подумать о чтении индексов. Документация SQL обширна по этому вопросу и может быть чрезвычайно полезна при работе с более сложными базами данных. Индексы могут быть очень хорошими при правильном использовании и повышении производительности на тонну. Конечно, при индексировании чего-либо или всего есть недостатки, поэтому вы должны ставить индексы на часто задаваемые или часто используемые в поисковых запросах поля, а также комбинированные индексы могут использоваться в вашу пользу большую часть времени. [Документация по индексам] (https://msdn.microsoft.com/en-us/library/ms175049.aspx) – Tikkes