SELECT
s.mobileNumber,
s.SenderId,
REPLACE(REPLACE(REPLACE(REPLACE(s.Message, '\\r', ''), '\\r\\n', ''), '\\n', ''), '\\t', ' ') AS Message,
s.AliasMessageId,
s.messageid,
CONVERT_TZ(s.SubmitDate, 'UTC', '+06:00') AS Submitdate,
IFNULL(CONVERT_TZ(i.DoneDate, 'UTC', '+06:00'), 'Dlr Pending') AS DoneDate,
IFNULL(i.Status, s.Status) AS Status,
s.SmsCost,
s.SellingPrice,
s.countryiso AS CountryISO,
s.mccmnc AS MCCMNC,
(CASE WHEN i.ErrorCode IS NULL THEN s.ErrorCode ELSE i.ErrorCode END) AS ErrorCode,
s.gatewayid
FROM
sentbox PARTITION (p20250209) s
LEFT JOIN
inbounddlr PARTITION (p20250209) i FORCE INDEX (MessageId) -- Force using MessageId index
ON s.messageid = i.messageid
WHERE
s.accountid = 704
AND s.SubmitDate BETWEEN '2025-02-08 00:00:00' AND '2025-02-08 23:59:59'
LIMIT
0, 65000;
Этот запрос возвращает 14 306 записей за 5 минут . analytics :
SELECT
s.mobileNumber,
s.SenderId,
REPLACE(REPLACE(REPLACE(REPLACE(s.Message, '\\r', ''), '\\r\\n', ''), '\\n', ''), '\\t', ' ') AS Message,
s.AliasMessageId,
s.messageid,
CONVERT_TZ(s.SubmitDate, 'UTC', '+06:00') AS Submitdate,
IFNULL(CONVERT_TZ(i.DoneDate, 'UTC', '+06:00'), 'Dlr Pending') AS DoneDate,
IFNULL(i.Status, s.Status) AS Status,
s.SmsCost,
s.SellingPrice,
s.countryiso AS CountryISO,
s.mccmnc AS MCCMNC,
(CASE WHEN i.ErrorCode IS NULL THEN s.ErrorCode ELSE i.ErrorCode END) AS ErrorCode,
s.gatewayid
FROM
sentbox PARTITION (p20250210) s
LEFT JOIN
inbounddlr PARTITION (p20250210) i FORCE INDEX (MessageId) -- Force using MessageId index
ON s.messageid = i.messageid
WHERE
s.accountid = 704
AND s.SubmitDate BETWEEN '2025-02-09 00:00:00' AND '2025-02-09 23:59:59'
LIMIT
0, 65000;
Этот запрос возвращает 15 004 записи за 4 секунды . analytics :
"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra"
"1" "SIMPLE" "i" "ref" "MessageId" "MessageId" "152" "itextwebv2smpp.s.MessageId" "1" "Using where"
< /code>
[b] Проблема: < /strong>
Я заметил, что, хотя второй запрос работает хорошо (4 секунды), первый запрос занимает гораздо больше (5 минут), даже если Оба запроса похожи. После анализа производительности запроса я заметил, что первый запрос не использует желаемый индекс [/b] (MessageId
), в то время как второй запрос -. Могу ли я оптимизировать запрос, чтобы сократить время выполнения? будет оценен! Заранее спасибо.
Я работаю с двумя похожими запросами SQL в MySQL, но один из них требует значительно больше времени для выполнения. У меня есть два запроса: [b] Query 1: [/b] [code]SELECT s.mobileNumber, s.SenderId, REPLACE(REPLACE(REPLACE(REPLACE(s.Message, '\\r', ''), '\\r\\n', ''), '\\n', ''), '\\t', ' ') AS Message, s.AliasMessageId, s.messageid, CONVERT_TZ(s.SubmitDate, 'UTC', '+06:00') AS Submitdate, IFNULL(CONVERT_TZ(i.DoneDate, 'UTC', '+06:00'), 'Dlr Pending') AS DoneDate, IFNULL(i.Status, s.Status) AS Status, s.SmsCost, s.SellingPrice, s.countryiso AS CountryISO, s.mccmnc AS MCCMNC, (CASE WHEN i.ErrorCode IS NULL THEN s.ErrorCode ELSE i.ErrorCode END) AS ErrorCode, s.gatewayid FROM sentbox PARTITION (p20250209) s LEFT JOIN inbounddlr PARTITION (p20250209) i FORCE INDEX (MessageId) -- Force using MessageId index ON s.messageid = i.messageid WHERE s.accountid = 704 AND s.SubmitDate BETWEEN '2025-02-08 00:00:00' AND '2025-02-08 23:59:59' LIMIT 0, 65000; [/code] Этот запрос возвращает [b] 14 306 записей за 5 минут [/b]. [b] analytics [/b]: [code]"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra" "1" "SIMPLE" "i" "ALL" "MessageId" \N \N \N "2" "Using where; Using join buffer (flat, BNL join)"
[/code] [b] Query 2: [/b] [code]SELECT s.mobileNumber, s.SenderId, REPLACE(REPLACE(REPLACE(REPLACE(s.Message, '\\r', ''), '\\r\\n', ''), '\\n', ''), '\\t', ' ') AS Message, s.AliasMessageId, s.messageid, CONVERT_TZ(s.SubmitDate, 'UTC', '+06:00') AS Submitdate, IFNULL(CONVERT_TZ(i.DoneDate, 'UTC', '+06:00'), 'Dlr Pending') AS DoneDate, IFNULL(i.Status, s.Status) AS Status, s.SmsCost, s.SellingPrice, s.countryiso AS CountryISO, s.mccmnc AS MCCMNC, (CASE WHEN i.ErrorCode IS NULL THEN s.ErrorCode ELSE i.ErrorCode END) AS ErrorCode, s.gatewayid FROM sentbox PARTITION (p20250210) s LEFT JOIN inbounddlr PARTITION (p20250210) i FORCE INDEX (MessageId) -- Force using MessageId index ON s.messageid = i.messageid WHERE s.accountid = 704 AND s.SubmitDate BETWEEN '2025-02-09 00:00:00' AND '2025-02-09 23:59:59' LIMIT 0, 65000; [/code] Этот запрос возвращает [b] 15 004 записи за 4 секунды [/b]. [b] analytics [/b]: [code]"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra" "1" "SIMPLE" "i" "ref" "MessageId" "MessageId" "152" "itextwebv2smpp.s.MessageId" "1" "Using where" < /code> [b] Проблема: < /strong> Я заметил, что, хотя второй запрос работает хорошо (4 секунды), первый запрос занимает гораздо больше (5 минут), даже если Оба запроса похожи. После анализа производительности запроса я заметил, что первый запрос не использует желаемый индекс [/b] (MessageId[/code]), в то время как второй запрос -. Могу ли я оптимизировать запрос, чтобы сократить время выполнения? будет оценен! Заранее спасибо.