Trong MySQL, các bảng tạm thời thường được tạo tự động và chỉ được xem xét khi phát sinh một số loại vấn đề. Bài đăng này phác thảo khi nào và tại sao MySQL sử dụng các bảng tạm thời và cách bạn có thể tránh chúng
một năm trước • 4 phút đọc
Mục lục
Bất kỳ ai đã thực hiện công việc quan trọng với MySQL đều có thể nhận thấy dữ liệu lớn ảnh hưởng đến cơ sở dữ liệu MySQL như thế nào—rất có thể là một số sắc thái phân vùng hoặc một vài mục liên quan đến chỉ mục. Tuy nhiên, một tính năng quan trọng khác do MySQL cung cấp cho mục đích dữ liệu lớn là khả năng tạo bảng tạm thời. Trong bài đăng trên blog này, chúng tôi sẽ đi vào chi tiết hơn về chủ đề này
Bảng tạm thời là gì?
Trong MySQL, bảng tạm thời là một loại bảng đặc biệt [bạn đoán nó] chứa dữ liệu tạm thời. Các loại bảng này thường được tạo tự động và thường chỉ được xem xét khi phát sinh một số loại vấn đề nhất định—ví dụ: khi các câu lệnh ALTER TABLE
được chạy trên các tập dữ liệu lớn.
Giả sử chúng ta chạy truy vấn ALTER TABLE
để thêm chỉ mục vào bảng có 100 triệu bản ghi trở lên. MySQL tạo một bảng tạm thời [hãy gọi nó là temp_table
ngay bây giờ] và sao chép tất cả dữ liệu từ bảng gốc [hãy gọi nó là demo_table
] sang bảng tạm thời. Sau đó, nó tạo lại dữ liệu từ bảng gốc [demo_table
] vào bảng tạm thời [temp_table
] và tạo tất cả các chỉ mục cần thiết cho demo_table
trên temp_table
, trước khi hoán đổi hai. Gây nhầm lẫn? . Bạn thấy đấy, MySQL thực hiện tất cả các hoạt động này để hiệu quả hơn. Tính hiệu quả thường là một trong những lý do chính khiến các DBA MySQL đề cập đến các bảng tạm thời với các đồng nghiệp là nhà phát triển của họ – một số người trong số họ cũng lưu ý rằng không có cách nào để biết khi nào MySQL sẽ tạo các bảng tạm thời, điều này không hoàn toàn sai
Khi nào các bảng tạm thời được tạo?
Trong MySQL, các bảng tạm thời được tạo khi
- Chúng tôi chạy câu lệnh
ALTER TABLE
trên tập dữ liệu khổng lồ [tham khảo ví dụ trên. ] - Chúng tôi chạy các câu lệnh
UPDATE
trên nhiều bảng cùng một lúc - Chúng tôi muốn một số giá trị
ALTER TABLE
0 và chúng tôi cũng muốn chúng được sắp xếp theo một cách nhất định - Chúng tôi muốn đếm các giá trị
ALTER TABLE
0 hiện có trong một bảng - Nếu chúng ta tham khảo tài liệu về MySQL, chúng ta sẽ thấy rằng MySQL sử dụng các bảng tạm thời trong một số trường hợp khác
Bây giờ bạn đã biết khi nào các bảng tạm thời được sử dụng, chúng ta sẽ xem xét một vài ví dụ, phải không?
ALTER TABLE
2ALTER TABLE
3ALTER TABLE
4ALTER TABLE
5
Bất kỳ ai đã làm việc với cơ sở dữ liệu MySQL gần như chắc chắn đã chạy ít nhất một trong các truy vấn này
Tránh các bảng tạm thời?
Một số kỹ sư MySQL có thể nói rằng sẽ là một ý tưởng hay nếu ngăn chặn việc tạo các bảng tạm thời. Tuy nhiên, nói thì dễ hơn làm – đặc biệt nếu bạn chạy phiên bản cơ sở dữ liệu trên ổ đĩa chậm và [hoặc] có nhiều dữ liệu. Tuy nhiên, vẫn có một vài điều bạn có thể làm. ví dụ: nếu bạn muốn tham gia vào vấn đề này, bạn có thể sử dụng một đĩa được coi là “đĩa RAM” và yêu cầu MySQL đặt tất cả dữ liệu tạm thời của nó vào đó. Vì đĩa phải lớn hơn dung lượng bộ nhớ bạn có, nên các thao tác thường sẽ hoàn thành sớm hơn. Đặt tham số này thành bất cứ nơi nào đĩa RAM của bạn được đặt và bạn đã hoàn tất
ALTER TABLE
6
Một cách khác là chỉ sử dụng dữ liệu cần thiết trước khi thực hiện bất kỳ thao tác nào cần sử dụng bảng tạm thời. Ví dụ: nếu bạn có một trăm triệu bản ghi trở lên và bạn khá chắc chắn rằng mình sẽ không sử dụng một số bản ghi đó [giả sử bạn sẽ không sử dụng dữ liệu từ một cột cụ thể, nhưng bạn không chắc chắn lắm về cách bỏ qua cột này
ALTER TABLE
8
Theo dõi các phần của truy vấn được in đậm. từ khóa ALTER TABLE
9 sẽ bỏ qua mọi lỗi và phần temp_table
0 sẽ chỉ tải dữ liệu vào một cột. temp_table
0
Và cuối cùng, nếu các bảng tạm thời làm bạn lo lắng, bạn cũng có thể tạo một bảng trống, di chuyển dữ liệu từ bảng của bạn sang bảng đó, bỏ bảng cũ và đổi tên bảng mới thành tên bạn muốn sử dụng. Ví dụ: nếu bảng ban đầu của bạn có tên là demo_table
- Tạo một bảng mới có tên là
temp_table
3 - Di chuyển dữ liệu từ bảng gốc sang
temp_table
3 theo cách thủ công. Để nhập số lượng lớn và nhanh hơn, bạn cũng có thể sử dụngALTER TABLE
7 - Thả
demo_table
.temp_table
7 - Đổi tên
temp_table
3 thànhdemo_table
.demo_table
0
Hoàn thành các bước này sẽ giúp MySQL hoàn thành các thao tác đó nhanh hơn
Bảng tạm thời và Arctype
Cuối cùng, nếu bạn thấy mình làm việc với MySQL trong một khoảng thời gian dài, có thể bạn sẽ không tránh được các bảng tạm thời ngay từ đầu. Như đã nêu, các bảng tạm thời được tạo cho khá nhiều thao tác. Vì vậy, mặc dù một số thao tác có thể hoàn thành nhanh hơn khi chúng được sử dụng, bạn có thể thấy mình đang tìm kiếm một giải pháp khác để giải quyết các sự cố cơ sở dữ liệu của mình vào cuối ngày. Một trong những giải pháp đó có thể là máy khách SQL – với Arctype đứng đầu;