Hỏi về mysql
Anh em tư vấn giúp mình vấn đề này nhé:
Mình đang có 1 bảng tăng mỗi ngày khoảng 60-70k rows, giờ bảng này sau 2 tháng là 2,3 m rows rồi. Request rất chậm. Khách hàng không muốn xóa dữ liệu nên sẽ làm theo giải pháp chia nhỏ thành nhiều bảng, cụ thể là mỗi tháng 1 bảng.
Và sẽ có 1 bảng pivot để biết được dữ liệu theo 1 trường cần query nhiều (date) được lưu ở những bảng nào. Phần này mình muốn giải thích thêm là unique của 1 row là 3 trường name, date và modified. Và khi get ở bảng này thì sẽ lấy theo trường date (where date = something).
Mình đang băn khoăn bảng pivot này thiết kế theo kiểu: (date, table) hay (date, [table1, table2...]) thì ngon hơn. Và mình cũng không chắc là query từ 10 bảng 1 triệu row nhanh hơn 1 bảng 10 triệu row. Multi thread có được không ?
Để mà viết ra rồi test perform thì khá tốn công, nên mong anh em từng có kinh nghiệm rồi xem cách này có cải thiện thời gian query nhiều không. Hay có giải pháp nào ngon hơn thì mong mn giới thiệu với.
Mình xin đội ơn và hậu tạ.
1 CÂU TRẢ LỜI
Trước tiên hãy xem có tối ưu đc câu query ko? Bạn explain câu query của bạn ra cho mọi người xem thử?
bạn xem giúp mình với
- Bạn tìm hiểu về FileSort của Mysql để tránh filesort nhiều nhất có thể
- Bạn tìm hiểu về full-text search và dùng nó để loại bỏ cái LIKE '%' đi nếu có thể. Like làm chậm câu query của bạn khi có 1M records.
- Bạn bỏ join đi. Hãy dùng where in nếu có thể.
- Đánh index cho trường date, modified, hotel_name
--> Sau đó test câu cũ với câu mới của bạn thử.
@thosanmaytinh index hết rồi, like thì không thể bỏ, join cũng không thể bỏ để dùng where bắt buộc phải dùng selfjoin, filesort với tmp mình cũng đọc rồi nhưng không làm mất đc vì câu query không viết khác được.
Câu hỏi hay quá. Hóng.
Có phát card không bác =))
@huukimit 100k momo hay card tuy bac
Mình nghĩ đây cũng có thể là một hướng đi này https://www.vertabelo.com/blog/everything-you-need-to-know-about-mysql-partitions/
Bạn tham khảo bài này nữa xem sao https://viblo.asia/p/mysql-khi-mot-table-qua-lon-500m-rows-thi-nen-lam-the-nao-4P856NbO5Y3
@xdangminhtruongx em cũng được tư vấn về cái này rồi nhưng thấy có khá nhiều vấn đề cần giải quyết nên định tìm cái khác xem sao.
@Plumpboy có 2 cái này không biết có hỗ trợ được gì cho bạn ko https://viblo.asia/p/he-thong-analytic-suong-suong-tu-du-lieu-30-trieu-nguoi-dung-vyDZOwwRZwj https://viblo.asia/p/analytic-cho-nguoi-nong-dan-bai-toan-dem-so-aWj53L0GK6m
Theo mình có 2 hướng để bạn nâng cấp hệ thống về db:
thường dữ liệu kiểu này mình sẽ xài Scalable Data Warehouse sử dụng OLAP, sơ lược về data wirehouse kết hợp với mysql https://www.slideshare.net/vanuganti/designing-scalable-data-warehouse-using-mysql
mình sẽ làm theo cách của anh @xdangminhtruongx và @doan281 giới thiệu. cảm ơn mọi người nhé.