diff --git a/apps/studio/components/interfaces/QueryPerformance/IndexAdvisor/index-advisor.utils.ts b/apps/studio/components/interfaces/QueryPerformance/IndexAdvisor/index-advisor.utils.ts index e0b80a3d5ad..723129f64b2 100644 --- a/apps/studio/components/interfaces/QueryPerformance/IndexAdvisor/index-advisor.utils.ts +++ b/apps/studio/components/interfaces/QueryPerformance/IndexAdvisor/index-advisor.utils.ts @@ -27,16 +27,18 @@ export function calculateImprovement( costBefore: number | undefined, costAfter: number | undefined ): number { - if ( - costBefore === undefined || - costAfter === undefined || - costBefore <= 0 || - costBefore <= costAfter - ) { + if (costBefore === undefined || costAfter === undefined) { return 0 } - return ((costBefore - costAfter) / costBefore) * 100 + const before = Number(costBefore) + const after = Number(costAfter) + + if (before <= 0 || before <= after) { + return 0 + } + + return ((before - after) / before) * 100 } interface CreateIndexParams { diff --git a/apps/studio/components/interfaces/QueryPerformance/QueryPanel.tsx b/apps/studio/components/interfaces/QueryPerformance/QueryPanel.tsx index 7c700952fa2..d052c10c2c5 100644 --- a/apps/studio/components/interfaces/QueryPerformance/QueryPanel.tsx +++ b/apps/studio/components/interfaces/QueryPerformance/QueryPanel.tsx @@ -21,8 +21,8 @@ export const QueryPanelScoreSection = ({ className, name, description, - before, - after, + before: rawBefore, + after: rawAfter, hideArrowMarkers = false, }: { className?: string @@ -31,58 +31,63 @@ export const QueryPanelScoreSection = ({ before?: number after?: number hideArrowMarkers?: boolean -}) => ( -
-
- {name} - - - - - - {description} - - -
-
-
- Currently: - - {before} - +}) => { + const before = rawBefore !== undefined ? Number(rawBefore) : undefined + const after = rawAfter !== undefined ? Number(rawAfter) : undefined + + return ( +
+
+ {name} + + + + + + {description} + +
- {before !== undefined && after !== undefined && before !== after && ( -
- With index: - {after} - {before !== undefined && !hideArrowMarkers && ( -
- {after > before ? ( - - ) : ( - - )} - {typeof before === 'number' && before !== 0 && !isNaN(before) && isFinite(before) && ( - before ? 'text-warning' : 'text-brand' - )} - > - {(((before - after) / before) * 100).toFixed(2)}% - - )} -
- )} +
+
+ Currently: + + {before} +
- )} + {before !== undefined && after !== undefined && before !== after && ( +
+ With index: + {after} + {before !== undefined && !hideArrowMarkers && ( +
+ {after > before ? ( + + ) : ( + + )} + {before !== 0 && !isNaN(before) && isFinite(before) && ( + before ? 'text-warning' : 'text-brand' + )} + > + {(((before - after) / before) * 100).toFixed(2)}% + + )} +
+ )} +
+ )} +
-
-) + ) +}