Tối ưu hóa cơ sở dữ liệu giá cổ phiếu trong MySQL


7

Tôi đang tải xuống một lượng lớn dữ liệu chứng khoán:

Biểu tượng Ticker, tên công ty, ngành công nghiệp,

Mở, cao, thấp, đóng

Tôi đã tự hỏi hiệu suất khôn ngoan nếu tách mã đánh dấu, tên công ty, ngành công nghiệp khỏi dữ liệu giá sẽ là tối ưu, vì tickersymbol và tên công ty chỉ lặp đi lặp lại nhiều lần.

Hoặc bên trong tham gia ticker + giá mỗi lần sẽ chậm hơn?

Vì thế:

  • bảng đơn (mã / giá), hoặc
  • hai bảng (đánh dấu) (giá)?


1
Tôi thực sự nghĩ rằng đây là một câu hỏi chính đáng cho SO, vì nó liên quan đến thiết kế cơ sở dữ liệu, đây là một chủ đề phổ biến ở đây.
Phil Sandler

Nguồn là gì?
Munchi

Câu trả lời:


3

Lưu trữ dữ liệu trong một bảng không nhất thiết phải nhanh hơn. Nếu bạn di chuyển tên công ty và ngành ra khỏi bảng, mỗi hàng sẽ nhỏ hơn. Hàng nhỏ hơn có nghĩa là nhiều hàng hơn trên mỗi trang dữ liệu. Và điều đó có nghĩa là ít trang dữ liệu hơn.

Bạn có thể có một tình huống trong đó các hàng tên công ty sẽ lớn hơn bộ nhớ. Nhưng các trang không có tên công ty sẽ phù hợp với bộ nhớ. Rõ ràng, tình huống sau sẽ dẫn đến các truy vấn nhanh hơn.

Tuy nhiên, để thậm chí bắt đầu trả lời các câu hỏi về hiệu suất, người ta cần thông tin về các loại truy vấn đang được chạy. Điều này sẽ thông báo không chỉ cấu trúc bảng, mà cả các chỉ mục và kiểu dữ liệu có thể cần thiết.


2

Nếu tốc độ là mối quan tâm duy nhất của bạn và dữ liệu chỉ để đọc (không cập nhật / tạo): tất cả những thứ khác đều bằng nhau, việc lưu trữ tất cả dữ liệu trong một bảng sẽ nhanh hơn.

Lưu trữ nó trong các bảng riêng biệt là lưu trữ "bình thường hóa" ( Chuẩn hóa ) và lưu trữ trong một bảng đang lưu trữ "không chuẩn hóa" ( Không chuẩn hóa ),


2

Mặt sau của tính toán phong bì:

  • MySQL Ints mất 4 byes

  • Một biểu tượng đánh dấu chứng khoán sẽ là 3-5 byte. (Tôi đoán vậy?) Nếu bạn làm "CHAR (5)" thì mỗi biểu tượng sẽ mất 5 byte.

Vì vậy, với 4 so với 5 byte, bạn sẽ không thấy nhiều sự khác biệt. Nhưng nếu MỘT SỐ cổ phiếu của bạn dài hơn, bạn sẽ muốn sử dụng VARCHAR và nó sẽ kém hiệu quả hơn một chút.

Nếu bạn đi với 2 bảng, việc chèn sẽ chậm hơn vì phải thực hiện tra cứu trong một bảng trước khi chèn vào bảng khác. Các tham gia sẽ chậm hơn một chút.

Nhưng nếu bạn quan tâm đến hiệu suất hơn bất kỳ thứ gì khác, bạn luôn có thể lưu trữ toàn bộ bảng ánh xạ stock-to-ID trên máy khách của mình. Sau đó, các truy vấn sẽ không liên quan đến việc tham gia.

Để thực sự trả lời câu hỏi của bạn, bạn cần biết chính xác những truy vấn bạn cần và mức độ thường xuyên của chúng, sau đó kiểm tra nó trong các tình huống khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.