Query 1:
Код: Выделить всё
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;
analytics :
Код: Выделить всё
"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)"
Код: Выделить всё
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;
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Подробнее здесь: https://stackoverflow.com/questions/794 ... ze-its-exe