商品利润镜像:长单号只查线上订单号,内部订单号补索引 #472

Merged
renshen merged 1 commits from fix/renshen-afs-internal-index into main 2026-10-23 14:52:39 +08:00
2 changed files with 16 additions and 2 deletions

View File

@ -422,6 +422,7 @@ return [
'wide_strings' => true,
'indexes' => [
['undefined8', 'undefined7'],
['undefined1'],
['undefined2'],
['undefined10'],
],

View File

@ -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<string>
*/
private function orderNumberFields(string $orderNo): array
{
return mb_strlen($orderNo) >= 12
? ['online_order_no']
: ['online_order_no', 'internal_order_no'];
}
}