Asked Feb 26th, 8:24 AM 286 2 1
  • 286 2 1
+11

Hỏi về mysql

Share
  • 286 2 1

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ạ.

Feb 26th, 8:26 AM

Câu hỏi hay quá. Hóng.

0
| Reply
Share
Feb 26th, 8:27 AM

Có phát card không bác 🤔 =))

0
| Reply
Share
Feb 26th, 8:29 AM

@huukimit 100k momo hay card tuy bac

0
| Reply
Share
Truong Dang @xdangminhtruongx
Feb 26th, 8:50 AM

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/

+1
| Reply
Share
Feb 26th, 9:09 AM
+2
| Reply
Share
Feb 26th, 9:30 AM

@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.

+1
| Reply
Share
No Naem @Naem
Feb 26th, 9:55 AM
+2
| Reply
Share
Feb 28th, 2:38 AM

Theo mình có 2 hướng để bạn nâng cấp hệ thống về db:

  • 1: chuyển dữ liệu hiện tại sang elasticsearch và sử dụng song song 2 nơi lưu trữ, vừa ở mysql, vừa ở elasticsearch
  • 2: ốp partition theo range về thời gian vào và sửa lại câu truy vấn theo partition Bạn nghiên cứu xem sao.
+1
| Reply
Share
WheeBoo @quanghung97
Feb 28th, 2:58 AM

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

+1
| Reply
Share
Feb 28th, 6:35 AM

mình sẽ làm theo cách của anh @xdangminhtruongx@doan281 giới thiệu. cảm ơn mọi người nhé.

+1
| Reply
Share

1 ANSWERS


Answered Feb 28th, 7:58 AM
0

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ử?

Share
Feb 28th, 10:35 AM

Screenshot from 2020-02-28 17-34-57.png

bạn xem giúp mình với

0
| Reply
Share
Feb 28th, 11:57 AM

@Plumpboy

  • 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ử.

0
| Reply
Share
Mar 1st, 4:01 AM

@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.

0
| Reply
Share