Yêu cầu thg 2 26, 2020 8:24 SA 363 2 1
  • 363 2 1
+11

Hỏi về mysql

Chia sẻ
  • 363 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ạ.

thg 2 26, 2020 8:26 SA

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

thg 2 26, 2020 8:27 SA

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

thg 2 26, 2020 8:29 SA

@huukimit 100k momo hay card tuy bac

Avatar Truong Dang @xdangminhtruongx
thg 2 26, 2020 8:50 SA

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/

thg 2 26, 2020 9:09 SA
thg 2 26, 2020 9:30 SA

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

Avatar No Naem @Naem
thg 2 26, 2020 9:55 SA
thg 2 28, 2020 2:38 SA

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.
Avatar WheeBoo @quanghung97
thg 2 28, 2020 2:58 SA

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

thg 2 28, 2020 6:35 SA

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 CÂU TRẢ LỜI


Đã trả lời thg 2 28, 2020 7:58 SA
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ử?

Chia sẻ
thg 2 28, 2020 10:35 SA

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

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

thg 2 28, 2020 11:57 SA

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

thg 3 1, 2020 4:01 SA

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí