优化后台高频查询性能
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
-- +goose Up
|
||||
-- 高频客服列表不再实时扫描全部订单与聊天消息;以下字段是可由业务记录重建的读取快照。
|
||||
|
||||
ALTER TABLE chat_conversations
|
||||
ADD COLUMN latest_order_id BIGINT UNSIGNED NULL COMMENT '发布群最新订单ID快照' AFTER listing_id,
|
||||
ADD COLUMN latest_order_no VARCHAR(64) NOT NULL DEFAULT '' COMMENT '发布群最新订单号快照' AFTER latest_order_id,
|
||||
ADD COLUMN latest_order_status VARCHAR(32) NOT NULL DEFAULT '' COMMENT '发布群最新订单状态快照' AFTER latest_order_no,
|
||||
ADD COLUMN latest_order_handoff_status VARCHAR(32) NOT NULL DEFAULT '' COMMENT '发布群最新交接状态快照' AFTER latest_order_status,
|
||||
ADD COLUMN latest_order_refund_status VARCHAR(32) NOT NULL DEFAULT '' COMMENT '发布群最新退款状态快照' AFTER latest_order_handoff_status,
|
||||
ADD COLUMN last_attention_message_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '最后一条需客服关注消息ID' AFTER latest_order_refund_status,
|
||||
ADD COLUMN last_admin_message_id BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '最后一条客服消息ID' AFTER last_attention_message_id,
|
||||
ADD KEY idx_chat_conversations_latest_order_status (latest_order_status, last_message_at, id);
|
||||
|
||||
UPDATE chat_conversations AS c
|
||||
JOIN (
|
||||
SELECT ro.id, ro.listing_id, ro.order_no, ro.status, ro.handoff_status, ro.refund_status
|
||||
FROM rental_orders AS ro
|
||||
JOIN (
|
||||
SELECT listing_id, MAX(id) AS id
|
||||
FROM rental_orders
|
||||
GROUP BY listing_id
|
||||
) AS latest ON latest.id = ro.id
|
||||
) AS o ON o.listing_id = c.listing_id
|
||||
SET c.latest_order_id = o.id,
|
||||
c.latest_order_no = o.order_no,
|
||||
c.latest_order_status = o.status,
|
||||
c.latest_order_handoff_status = o.handoff_status,
|
||||
c.latest_order_refund_status = o.refund_status
|
||||
WHERE c.order_id IS NULL;
|
||||
|
||||
UPDATE chat_conversations AS c
|
||||
LEFT JOIN (
|
||||
SELECT conversation_id,
|
||||
COALESCE(MAX(CASE WHEN admin_attention_type <> '' OR sender_type = 'user' THEN id END), 0) AS attention_id,
|
||||
COALESCE(MAX(CASE WHEN sender_type = 'admin' THEN id END), 0) AS admin_id
|
||||
FROM chat_messages
|
||||
GROUP BY conversation_id
|
||||
) AS m ON m.conversation_id = c.id
|
||||
SET c.last_attention_message_id = COALESCE(m.attention_id, 0),
|
||||
c.last_admin_message_id = COALESCE(m.admin_id, 0);
|
||||
|
||||
-- +goose Down
|
||||
|
||||
ALTER TABLE chat_conversations
|
||||
DROP KEY idx_chat_conversations_latest_order_status,
|
||||
DROP COLUMN last_admin_message_id,
|
||||
DROP COLUMN last_attention_message_id,
|
||||
DROP COLUMN latest_order_refund_status,
|
||||
DROP COLUMN latest_order_handoff_status,
|
||||
DROP COLUMN latest_order_status,
|
||||
DROP COLUMN latest_order_no,
|
||||
DROP COLUMN latest_order_id;
|
||||
Reference in New Issue
Block a user