Các bảng tạm thời MySQL có nhanh hơn không?

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

Các bảng tạm thời MySQL có nhanh hơn không?
Bởi Lukas Vileikis

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

  1. 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. )
  2. 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
  3. Chúng tôi muốn một số giá trị ALTER TABLE0 và chúng tôi cũng muốn chúng được sắp xếp theo một cách nhất định
  4. Chúng tôi muốn đếm các giá trị ALTER TABLE0 hiện có trong một bảng
  5. 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?

  1. ALTER TABLE2
  2. ALTER TABLE3
  3. ALTER TABLE4
  4. ALTER TABLE5

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 TABLE6

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 TABLE8

Theo dõi các phần của truy vấn được in đậm. từ khóa ALTER TABLE9 sẽ bỏ qua mọi lỗi và phần temp_table0 sẽ chỉ tải dữ liệu vào một cột. temp_table0

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

  1. Tạo một bảng mới có tên là temp_table3
  2. Di chuyển dữ liệu từ bảng gốc sang temp_table3 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ụng ALTER TABLE7
  3. Thả demo_table. temp_table7
  4. Đổi tên temp_table3 thành demo_table. demo_table0

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;

Các bảng tạm thời có nhanh hơn không?

Lý do bảng tạm thời tải dữ liệu nhanh hơn vì chúng được tạo trong tempdb và việc ghi nhật ký hoạt động rất khác đối với bảng tạm thời. Tất cả các sửa đổi dữ liệu không được ghi vào tệp nhật ký như cách chúng được ghi vào bảng thông thường, do đó thao tác với các bảng Temp nhanh hơn.

Lợi thế của bảng tạm thời là gì?

Bảng tạm thời SQL toàn cầu hữu ích khi bạn muốn tập hợp kết quả hiển thị cho tất cả các phiên khác . Không cần thiết lập quyền. Bất kỳ ai cũng có thể chèn giá trị, sửa đổi hoặc truy xuất bản ghi từ bảng. Cũng lưu ý rằng bất kỳ ai cũng có thể THẢ bàn.

Bảng tạm thời có nhanh hơn biến bảng không?

Nó nói rằng các bảng tạm thời luôn ở trên đĩa và các biến của bảng nằm trong bộ nhớ, nghĩa là hiệu suất của biến bảng tốt hơn bảng tạm thời because table variable uses less IO operations than temp table.

Lợi thế của việc sử dụng bảng tạm thời thay vì bảng là gì?

Ưu điểm của bảng tạm thời