Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tốt để không chuẩn hóa cơ sở dữ liệu mysql là gì?

Tôi biết thêm về mssql đó là mysql, nhưng tôi không nghĩ rằng số lượng tham gia hoặc số hàng bạn đang nói đến sẽ gây ra cho bạn quá nhiều vấn đề với các chỉ mục chính xác tại chỗ. Bạn đã phân tích kế hoạch truy vấn để xem bạn có bị thiếu cái nào không?

http://dev.mysql.com/doc/refman/5.0 /en/explain.html

Điều đó đang được nói, một khi bạn hài lòng với các chỉ mục của mình và đã sử dụng hết các cách khác, hủy chuẩn hóa có thể là câu trả lời phù hợp. Nếu bạn chỉ có một hoặc hai truy vấn gặp sự cố, thì cách tiếp cận thủ công có thể phù hợp, trong khi một số loại công cụ lưu trữ dữ liệu có thể tốt hơn để tạo nền tảng phát triển các khối dữ liệu.

Đây là một trang web mà tôi tìm thấy có liên quan đến chủ đề:

http://www.meansandends.com / mysql-data-kho /? link_body% 2Fbody =% 7Bincl% 3AAggregation% 7D

Đây là một kỹ thuật đơn giản mà bạn có thể sử dụng để đơn giản hóa các truy vấn không chuẩn hóa, nếu bạn chỉ thực hiện một vài lần một lúc (và tôi không thay thế các bảng OLTP của bạn, chỉ tạo một bảng mới cho mục đích báo cáo). Giả sử bạn có truy vấn này trong ứng dụng của mình:

select a.name, b.address from tbla a 
join tblb b on b.fk_a_id = a.id where a.id=1

Bạn có thể tạo một bảng không chuẩn hóa và điền gần như cùng một truy vấn:

create table tbl_ab (a_id, a_name, b_address); 
-- (types elided)

Lưu ý rằng các dấu gạch dưới khớp với bí danh bảng mà bạn sử dụng

insert tbl_ab select a.id, a.name, b.address from tbla a
join tblb b on b.fk_a_id = a.id 
-- no where clause because you want everything

Sau đó, để sửa ứng dụng của bạn để sử dụng bảng không chuẩn hóa mới, hãy chuyển dấu chấm cho dấu gạch dưới.

select a_name as name, b_address as address 
from tbl_ab where a_id = 1;

Đối với các truy vấn lớn, điều này có thể tiết kiệm rất nhiều thời gian và làm rõ dữ liệu đến từ đâu và bạn có thể sử dụng lại các truy vấn bạn đã có.

Hãy nhớ rằng, tôi chỉ ủng hộ đây là phương sách cuối cùng. Tôi cá là có một vài chỉ mục sẽ giúp ích cho bạn. Và khi bạn khử chuẩn hóa, đừng quên tính toán thêm dung lượng trên đĩa của bạn và tìm ra khi nào bạn sẽ chạy truy vấn để điền các bảng mới. Điều này có thể xảy ra vào ban đêm hoặc bất cứ khi nào hoạt động ít. Và tất nhiên, dữ liệu trong bảng đó sẽ không bao giờ được cập nhật chính xác.

[Tuy nhiên, một chỉnh sửa khác] Đừng quên rằng các bảng mới bạn tạo cũng cần được lập chỉ mục! Phần tốt là bạn có thể lập chỉ mục cho nội dung trái tim của mình và không phải lo lắng về việc tranh chấp khóa cập nhật, vì ngoài việc chèn hàng loạt, bảng sẽ chỉ thấy các lựa chọn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để phát hiện các hàng thừa trong bảng?

  2. Làm cách nào để nâng cấp Cơ sở dữ liệu osCommerce từ v2.2 lên v2.3

  3. Làm thế nào để sắp xếp một truy vấn MySQL theo một cột cụ thể?

  4. Làm cách nào để chuyển đổi một cột thành ASCII ngay lập tức mà không cần lưu để kiểm tra các kết quả khớp với chuỗi ASCII bên ngoài?

  5. Sử dụng toán tử EXCEPT trên phiên bản MySql 5.1