diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9dcc64d..3fbd4d9 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -284,6 +284,9 @@ model SimulatorRun { promptVersion PromptVersion? @relation(fields: [promptVersionId], references: [id], onDelete: SetNull) model Model @relation(fields: [modelId], references: [id]) + // 添加索引优化查询性能 + @@index([userId, createdAt(sort: Desc)]) + @@index([userId, status, createdAt(sort: Desc)]) @@map("simulator_runs") } diff --git a/src/app/api/simulator/route.ts b/src/app/api/simulator/route.ts index 10d1f59..19cd908 100644 --- a/src/app/api/simulator/route.ts +++ b/src/app/api/simulator/route.ts @@ -95,11 +95,9 @@ export async function GET(request: NextRequest) { output: true, error: true, createdAt: true, - completedAt: true, inputTokens: true, outputTokens: true, totalCost: true, - duration: true, prompt: { select: { id: true, name: true } }, diff --git a/src/app/simulator/page.tsx b/src/app/simulator/page.tsx index 9058508..6e83ff7 100644 --- a/src/app/simulator/page.tsx +++ b/src/app/simulator/page.tsx @@ -1,6 +1,6 @@ 'use client' -import { useState, useEffect, useCallback } from 'react' +import { useState, useEffect, useCallback, useMemo } from 'react' import { useTranslations } from 'next-intl' import { useAuthUser } from '@/hooks/useAuthUser' import { Header } from '@/components/layout/Header' @@ -160,7 +160,7 @@ export default function SimulatorPage() { } } - const getRunStats = () => { + const stats = useMemo(() => { const total = runs.length const completed = runs.filter(run => run.status === 'completed').length const running = runs.filter(run => run.status === 'running').length @@ -173,7 +173,7 @@ export default function SimulatorPage() { const totalCost = runs.reduce((sum, run) => sum + (run.totalCost || 0), 0) return { total, completed, running, failed, totalTokens, totalCost } - } + }, [runs]) if (authLoading) { return ( @@ -190,7 +190,6 @@ export default function SimulatorPage() { return null } - const stats = getRunStats() return (