diff --git a/server/internal/api/exports.go b/server/internal/api/exports.go index 5494fee..15acdb9 100644 --- a/server/internal/api/exports.go +++ b/server/internal/api/exports.go @@ -305,8 +305,18 @@ func (a *ExportsAPI) create(w http.ResponseWriter, r *http.Request) { fail(w, r, http.StatusBadRequest, fmt.Sprintf("EXPLAIN 未通过:评分=%d,请优化索引或缩小查询范围", score)) return } + // 估算行数(优先使用分块统计,失败或结果为 0 时回退到单次 COUNT) var estimate int64 estimate = rrepo.EstimateFastChunked(dataDB, ds, main, p.Filters) + if estimate <= 0 { + logging.JSON("WARN", map[string]interface{}{ + "event": "estimate_zero_fallback", + "datasource": ds, + "main_table": main, + "filters": p.Filters, + }) + estimate = rrepo.EstimateFast(dataDB, ds, main, p.Filters) + } hdrs := make([]string, len(filtered)) for i, tf := range filtered { if v, ok := labels[tf]; ok {