2010-07-11 43 views
11

Có hiệu năng nào truy cập từ truy vấn trên hai (hoặc nhiều) cơ sở dữ liệu trên cùng một máy chủ MySQL, so với nếu các cơ sở dữ liệu đó đã được hợp nhất thành một?Hiệu năng truy vấn trên hai cơ sở dữ liệu mysql trên cùng một máy chủ?

Bối cảnh, tôi đã kế thừa việc bảo trì trên ứng dụng web chia dữ liệu thành ba cơ sở dữ liệu khác nhau chạy trên cùng một máy chủ, một cho nội dung, một cho người dùng và thông tin nhóm và một cho dữ liệu do người dùng tạo. Điều này là thuận tiện, ví dụ nó làm cho nó dễ dàng để thiết lập quyền truy cập, dữ liệu người dùng là hơi nhạy cảm để những người không cần biết nên không có quyền truy cập vào nó. Tuy nhiên, một trong những tính năng chính của ứng dụng là cung cấp báo cáo tiến độ cho người dùng hoặc nhóm trên nội dung. Điều đó có nghĩa là nó phải truy vấn trên hai hoặc nhiều cơ sở dữ liệu để tạo báo cáo.

Có tổn thất nào về hiệu suất hoạt động theo cách đó không?

+0

Không phải là tôi biết, không. –

+0

Không, tuy nhiên, hãy kiểm tra xem JOIN được thực hiện trên các kiểu trường dữ liệu tương tự hay không. Loại không phù hợp được lặp lại trên bay mà gây ra một hình phạt hiệu suất đáng kể. Điều đó rõ ràng không bị giới hạn trong việc truy vấn cơ sở dữ liệu chéo nhưng chúng tôi liên tục gặp những sự không khớp đó khi làm việc với các cơ sở dữ liệu được quản lý bởi các nhóm khác nhau. –

Trả lời

17

số Trong MySQL, "cơ sở dữ liệu" về cơ bản chỉ catalog mà không có hiệu lực trên đường dữ liệu được lưu trữ hoặc truy vấn.

Truy vấn hai bảng trong cơ sở dữ liệu khác nhau giống như truy vấn hai bảng trong cùng một db, từ quan điểm thực hiện truy vấn.

+1

Tôi đã chấp nhận câu trả lời này là câu trả lời đúng vì nó trả lời trực tiếp câu hỏi của tôi. Nhưng tôi cũng cảm thấy có sự khôn ngoan trong câu trả lời của Stephen. – Leon

+0

Vâng, cảm ơn bạn! – Stephen

3

Điều này sẽ chỉ giới thiệu một vấn đề đáng chú ý nếu bạn đang cố gắng sử dụng nhiều câu lệnh chọn cho dữ liệu trong mỗi cơ sở dữ liệu. Nó sẽ là tốt hơn để sử dụng một số phím nước ngoài, và sau đó sử dụng một truy vấn tham gia duy nhất để có được dữ liệu của người dùng và nội dung người dùng liên quan của mình. Bạn có thể đặt tên cho các giản đồ tiền tố trên các bảng của bạn trong câu lệnh join join.

ví dụ sẽ là tương tự như sau:

SELECT a.user, b.user_content 
    FROM database1.table1 AS a 
    LEFT JOIN database2.table2 AS b 
     ON a.user = b.user_id; 
Các vấn đề liên quan