Giới thiệu
Query chậm làm giảm trải nghiệm Dashboard. Prisma + MySQL cần tối ưu để đáp ứng thời gian phản hồi dưới 200ms.
Thêm index vào MySQL
Index giảm số lần quét bảng. Thêm index cho cột thường dùng trong WHERE và ORDER BY.
CREATE INDEX idx_orders_user_id ON orders (user_id); CREATE INDEX idx_products_category ON products (category_id);
Sau khi tạo, EXPLAIN xác nhận type chuyển từ ALL sang ref hoặc range.
Chọn trường cần thiết với select
Prisma trả về toàn bộ cột nếu không chỉ định. Dùng select để giảm payload.
const orders = await prisma.order.findMany({
where: { userId: 123 },
select: {
id: true,
total: true,
createdAt: true,
// bỏ các cột không cần
}
});
Giảm dữ liệu truyền về giúp React render nhanh hơn.
Sử dụng raw query cho truy vấn phức tạp
Prisma findMany không hỗ trợ GROUP BY hiệu quả. Dùng $queryRaw khi cần.
const revenue = await prisma.$queryRaw`
SELECT SUM(total) AS revenue
FROM orders
WHERE created_at BETWEEN ${startDate} AND ${endDate}
`;
Escaped backticks giữ an toàn SQL injection.
Kết nối pool trong Docker
Docker compose thường khởi tạo một container DB. Đặt maxConnections phù hợp để tránh quá tải.
services:
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
ports:
- "3306:3306"
command: --default-authentication-plugin=mysql_native_password --max-connections=200
Trong Prisma schema, cấu hình pool_timeout và connection_limit:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
connection_limit = 20
}
Caching với Tanstack Query
Tanstack Query lưu cache trong bộ nhớ, giảm số lần gọi API.
const useOrders = (userId) => {
return useQuery([
'orders', userId],
() => fetch(`/api/orders?userId=${userId}`).then(r => r.json()),
{ staleTime: 1000 * 60 * 5 } // 5 phút
);
};
Kết hợp Zustand để chia sẻ trạng thái giữa các component mà không gây re‑render toàn bộ.
Kết luận
Thêm index, giảm trường trả về, dùng raw query khi cần, cấu hình pool, và cache Tanstack Query mang lại Dashboard nhanh, ổn định.
Muốn học chi tiết toàn bộ quy trình xây dựng Dashboard, Tham khảo khóa học "[Full Course] Ecommerce Dashboard Fullstack Clone" tại đây.



.png)




