2010-01-26 69 views
12

Số lượng bảng tối đa mà MySQL có thể xử lý là bao nhiêu?Số lượng bảng tối đa trong MySQL

+0

Đối với tài liệu, vui lòng xem [Giới hạn về số lượng cơ sở dữ liệu và bảng] (https://dev.mysql.com/doc/refman/5.5/en/database-count- limit.html) và tương tự. Ví dụ. 'InnoDB' cho phép lên đến 4 tỷ bảng (và tôi phải thừa nhận nếu đó là US-tỷ hay không tôi không thể nói). Đối với một bình luận chuyên nghiệp: [Bill Karwin về "Có một số lượng tối đa các bảng cơ sở dữ liệu MySQL có thể có không?"] (Https://www.quora.com/Is-there-a-maximum-number-of-tables- a-MySQL-database-can-have) – hakre

Trả lời

24

Thực tế là bạn đang đặt câu hỏi này có lẽ là một chỉ báo cho thấy bạn không sử dụng phương pháp thực hành tốt nhất cho vấn đề của mình.

Bạn có thể muốn giải thích lý do tại sao bạn cần tạo nhiều bảng để xem bạn có nhận được đề xuất tốt hơn về cách giải quyết vấn đề này hay không. Tuy nhiên, không có giới hạn máy chủ về số lượng bảng trong cơ sở dữ liệu MySQL, nhưng vì mỗi bảng MyISAM có tệp được liên kết, thì bất kỳ giới hạn OS nào về số lượng tệp được phép sẽ có hiệu lực. Các bảng, chỉ mục, v.v. của InnoDB được lưu trữ trong một vùng bảng duy nhất, với tối đa hai tỷ bảng. (Source)

+2

MyISAM là gì? – John

+4

MyISAM là công cụ lưu trữ mặc định cho MySQL. Các bảng của bạn có thể đang sử dụng MyISAM trừ khi bạn đã khai báo rõ ràng để sử dụng InnoDB. Mỗi bảng MyISAM được lưu trữ trên đĩa trong ba tập tin. Các tệp có tên bắt đầu bằng tên bảng và có phần mở rộng để biểu thị loại tệp. Tệp .frm lưu trữ định dạng bảng. Tệp dữ liệu có phần mở rộng .MYD. Tệp chỉ mục có phần mở rộng .MYI. Thông tin thêm: http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html, http://en.wikipedia.org/wiki/MyISAM. –

+2

+1 cho vẫn trả lời câu hỏi ngay cả sau khi chỉ ra nó có lẽ không phải là một ý tưởng tốt. –

2

Trái ngược với câu trả lời của Daniel Vassallo, tôi có trường hợp sử dụng khi cần một số lượng lớn bảng. Tôi có thể sai, nhưng tôi không nghĩ rằng có bất kỳ "thực hành tốt nhất" mà tôi có thể làm giảm số lượng bảng.

Mặc dù có thể đúng là số lượng bảng chỉ bị giới hạn bởi hệ điều hành, tôi chỉ muốn thêm rằng tôi đang sử dụng hơn 1000 bảng trong cơ sở dữ liệu với hiệu suất khá tốt. Nhược điểm duy nhất có vẻ là tăng chi phí cho các tập tin .frm. Trong trường hợp của tôi, tôi đã chia một bảng rất lớn thành 1000 + bảng riêng biệt với cùng một cấu trúc bảng. Phân vùng MySQL không phải là một lựa chọn cho tôi vì không chuẩn hóa, đòi hỏi 2 bản sao của mỗi bản ghi trong các bảng riêng biệt.

+0

* "Tôi đã chia một bảng rất lớn thành 1000 bảng riêng biệt" * - tại sao bạn phải làm điều đó? – TMS

+0

Để cải thiện hiệu suất (thời gian truy vấn nhanh hơn). Như tôi đã giải thích, phân vùng không phải là một lựa chọn vì nó không cho phép tôi đặt hai bản sao của mỗi bản ghi vào các phân vùng khác nhau (ít nhất là không có cách nào tôi có thể tìm ra). – robguinness

+0

Từ quan điểm bình thường hóa dữ liệu, nhiều bảng có thể là thực hành không tốt (phụ thuộc vào các bảng). Chỉ cần nói, mỗi lý thuyết cần phải được chứng minh trong thực tế và ngược lại. Vì vậy, tôi nghi ngờ lập trường được đưa ra trong bình luận của bạn (trong câu trả lời) nhưng +1 để chia sẻ những gì bạn đã làm. – hakre

4

Tôi cũng có trường hợp sử dụng khi cần một số lượng lớn bảng. Hiện tại, một trong những cơ sở dữ liệu của chúng tôi có gần 100.000 bảng với hiệu suất tuyệt vời.

Như Rob Guinness đã đề cập, có một chi phí đáng kể cho các tệp .frm. Điều quan trọng cần lưu ý là bất kỳ truy vấn nào vào information_schema không có giới hạn về lược đồ và nếu có thể, chính bảng sẽ dẫn đến một lần truy cập hiệu suất nghiêm trọng trong khi truy vấn chạy.

+0

Mỗi bảng trong số này có cấu trúc khác nhau không? – TMS

0

Thực tế là bạn đang đặt câu hỏi này có thể là chỉ báo mà bạn không sử dụng phương pháp thực hành tốt nhất cho vấn đề của mình.

Một tình huống tiềm năng mà bạn có thể cần nhiều bảng là khi bạn đang phát triển ứng dụng nhiều bên thuê cho mỗi đối tượng thuê bạn tạo bộ bảng riêng biệt (ví dụ: tentantId là tiền tố tên bảng). Xem bài viết này (phần Cô lập dữ liệu): http://www.javacodegeeks.com/2013/11/architecting-a-multi-tenant-application.html

Các vấn đề liên quan