From a5ee31646d9a5077083156fe3375042b9527c70d Mon Sep 17 00:00:00 2001 From: renshen <1005457301@qq.com> Date: Fri, 23 Oct 2026 14:52:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E5=88=A9=E6=B6=A6=E9=95=9C?= =?UTF-8?q?=E5=83=8F=EF=BC=9A=E9=95=BF=E5=8D=95=E5=8F=B7=E5=8F=AA=E6=9F=A5?= =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E8=AE=A2=E5=8D=95=E5=8F=B7=EF=BC=8C=E5=86=85?= =?UTF-8?q?=E9=83=A8=E8=AE=A2=E5=8D=95=E5=8F=B7=E8=A1=A5=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 页面按单号查询时,19 位线上单号不再用内部订单号列做前缀匹配(该列无索引会全表扫描 67 秒) - 内部订单号补索引,短单号仍两列都查 --- config/upstream_mirrors.php | 1 + .../Repositories/GoodsProfitAfsRepository.php | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/config/upstream_mirrors.php b/config/upstream_mirrors.php index b978027e..9d98f91b 100644 --- a/config/upstream_mirrors.php +++ b/config/upstream_mirrors.php @@ -422,6 +422,7 @@ return [ 'wide_strings' => true, 'indexes' => [ ['undefined8', 'undefined7'], + ['undefined1'], ['undefined2'], ['undefined10'], ], diff --git a/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php b/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php index 198e4fcc..0106d199 100644 --- a/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php +++ b/modules/EcommerceFinance/Repositories/GoodsProfitAfsRepository.php @@ -95,7 +95,7 @@ class GoodsProfitAfsRepository // 单号查询走各自列的索引,避免 undefined2 OR undefined1 触发全表扫描。 if ($orderNo !== '') { - foreach (['online_order_no', 'internal_order_no'] as $field) { + foreach ($this->orderNumberFields($orderNo) as $field) { if (! isset($columns[$field])) { continue; } @@ -183,7 +183,7 @@ class GoodsProfitAfsRepository $records = []; $cap = max($limit * 4, 400); - foreach (['online_order_no', 'internal_order_no'] as $field) { + foreach ($this->orderNumberFields($orderNo) as $field) { if (! isset($columns[$field])) { continue; } @@ -345,4 +345,17 @@ class GoodsProfitAfsRepository return trim($label); } + + /** + * 线上订单号和内部订单号长度差很多(19 位 vs 7~8 位)。长单号只查线上订单号, + * 避免用内部订单号列做 `like '长单号%'` 的全表扫描。 + * + * @return list + */ + private function orderNumberFields(string $orderNo): array + { + return mb_strlen($orderNo) >= 12 + ? ['online_order_no'] + : ['online_order_no', 'internal_order_no']; + } } -- 2.47.2