Hướng dẫn mysql create temporary table memory - mysql tạo bộ nhớ bảng tạm thời

Nó phụ thuộc vào động cơ bạn chỉ định. Theo mặc định, dữ liệu bảng sẽ được lưu trữ trên đĩa. Nếu bạn chỉ định công cụ bộ nhớ, dữ liệu sẽ chỉ được lưu trữ trong bộ nhớ.

Có thể thực sự tìm thấy các tệp được tạo trong hệ thống tập tin khi các bảng tạm thời được tạo. Sau khi chạy các lệnh sau:

CREATE TABLE test.table_myisam [x int] ENGINE=MyISAM;
CREATE TABLE test.table_memory [x int] ENGINE=MEMORY;
CREATE TEMPORARY TABLE test.temp_table_myisam [x int] ENGINE=MyISAM;
CREATE TEMPORARY TABLE test.temp_table_memory [x int] ENGINE=MEMORY;

Sau đó, tôi đã kiểm tra thư mục: C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ Data \ test [trên Windows] và các tệp có mặt là:

table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.

Các bảng tạm thời được lưu trữ trong C: \ Windows \ Temp và có tên bất thường, nhưng bên trong dữ liệu được lưu trữ theo cùng một cách.

#sql9a0_7_d.frm    # This is the MyISAM temporary table.
#sql9a0_7_d.MYD    # MyISAM data file for temporary table.
#sql9a0_7_d.MYI    # MyISAM index file for temporary table.

#sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.

8.4.4 & nbsp; Sử dụng bảng tạm thời nội bộ trong MySQL

Trong một số trường hợp, máy chủ tạo các bảng tạm thời nội bộ trong khi xử lý các câu lệnh. Người dùng không có quyền kiểm soát trực tiếp khi điều này xảy ra.

Máy chủ tạo các bảng tạm thời trong các điều kiện như sau:

  • Đánh giá các tuyên bố UNION, với một số ngoại lệ được mô tả sau.

  • Đánh giá một số quan điểm, như những quan điểm sử dụng thuật toán TEMPTABLE, UNION hoặc tổng hợp.

  • Đánh giá các bảng dẫn xuất [xem Phần & NBSP; 13.2.10.8, Bảng dẫn xuất của Hồi giáo].

  • Các bảng được tạo để xử lý phụ hoặc vật chất hóa semijoin [xem Phần & NBSP; 8.2.2, Tối ưu hóa các truy vấn, bảng dẫn xuất và xem các tài liệu tham khảo].

  • Đánh giá các câu lệnh chứa mệnh đề ORDER BY và mệnh đề GROUP BY khác nhau hoặc trong đó ORDER BY hoặc GROUP BY chứa các cột từ các bảng khác với bảng đầu tiên trong hàng đợi tham gia.

  • Đánh giá

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    0 kết hợp với
    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    1 có thể yêu cầu bảng tạm thời.

  • Đối với các truy vấn sử dụng công cụ sửa đổi

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    2, MySQL sử dụng bảng tạm thời trong bộ nhớ, trừ khi truy vấn cũng chứa các phần tử [được mô tả sau] yêu cầu lưu trữ trên đĩa.

  • Để đánh giá các câu lệnh

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    3 chọn và chèn vào cùng một bảng, MySQL tạo một bảng tạm thời bên trong để giữ các hàng từ
    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    4, sau đó chèn các hàng đó vào bảng đích. Xem Phần & NBSP; 13.2.5.1, Chèn chèn ... Chọn câu lệnh.

  • Đánh giá các tuyên bố

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    5 nhiều bảng.

  • Đánh giá các biểu thức

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    6 hoặc
    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    7.

Để xác định xem một câu lệnh có yêu cầu bảng tạm thời hay không, hãy sử dụng

table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.
8 và kiểm tra cột
table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.
9 để xem liệu nó có nói hay không [xem Phần & NBSP; 8.8.1, Tối ưu hóa các truy vấn với giải thích].
table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.
8 không nhất thiết phải nói
#sql9a0_7_d.frm    # This is the MyISAM temporary table.
#sql9a0_7_d.MYD    # MyISAM data file for temporary table.
#sql9a0_7_d.MYI    # MyISAM index file for temporary table.

#sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
0 cho các bảng tạm thời có nguồn gốc hoặc được vật chất hóa.

Một số điều kiện truy vấn ngăn chặn việc sử dụng bảng tạm thời trong bộ nhớ, trong trường hợp đó máy chủ sử dụng bảng trên đĩa thay thế: thay vào đó:

  • Sự hiện diện của cột

    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    3 hoặc
    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    4 trong bảng. Điều này bao gồm các biến do người dùng xác định có giá trị chuỗi vì chúng được coi là các cột
    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    3 hoặc
    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    4, tùy thuộc vào giá trị của chúng là chuỗi nhị phân hay không phân chia, tương ứng.

  • Sự hiện diện của bất kỳ cột chuỗi nào có chiều dài tối đa lớn hơn 512 [byte cho chuỗi nhị phân, ký tự cho các chuỗi không phân biệt] trong danh sách

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    4, nếu UNION hoặc
    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    9 được sử dụng.

  • Các câu lệnh UNION0 và UNION1 sử dụng

    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    3 làm loại cho một số cột, do đó bảng tạm thời được sử dụng cho kết quả là một bảng trên đĩa.

Máy chủ không sử dụng bảng tạm thời cho các câu lệnh UNION đáp ứng các bằng cấp nhất định. Thay vào đó, nó giữ lại từ việc tạo bảng tạm thời chỉ các cấu trúc dữ liệu cần thiết để thực hiện đánh máy cột kết quả. Bảng không hoàn toàn được khởi tạo và không có hàng nào được ghi vào hoặc đọc từ nó; Hàng được gửi trực tiếp đến máy khách. Kết quả là giảm các yêu cầu về bộ nhớ và đĩa và độ trễ nhỏ hơn trước khi hàng đầu tiên được gửi đến máy khách vì máy chủ không cần đợi cho đến khi khối truy vấn cuối cùng được thực thi.

table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.
8 và đầu ra theo dõi tối ưu hóa phản ánh chiến lược thực hiện này: Khối truy vấn UNION5 không có mặt vì khối đó tương ứng với phần đọc từ bảng tạm thời.

Những điều kiện này đủ điều kiện để đánh giá mà không có bảng tạm thời:

  • Liên minh là

    #sql9a0_7_d.frm    # This is the MyISAM temporary table.
    #sql9a0_7_d.MYD    # MyISAM data file for temporary table.
    #sql9a0_7_d.MYI    # MyISAM index file for temporary table.
    
    #sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.
    
    9, không phải UNION hoặc UNION9.

  • Không có điều khoản toàn cầu

    table_innodb.frm   # Table definition.
    table_innodb.MYD   # MyISAM table data file.
    table_innodb.MYI   # MyISAM table index file.
    
    table_memory.frm   # No MYD or MYI file for the MEMORY engine.
    
    1.

  • Liên minh không phải là khối truy vấn cấp cao nhất của tuyên bố TEMPTABLE1.

Động cơ lưu trữ bàn tạm thời nội bộ

Một bảng tạm thời bên trong có thể được giữ trong bộ nhớ và được xử lý bởi công cụ lưu trữ TEMPTABLE2 hoặc được lưu trữ trên đĩa bởi công cụ lưu trữ TEMPTABLE3 hoặc TEMPTABLE4.

Nếu một bảng tạm thời nội bộ được tạo dưới dạng bảng trong bộ nhớ nhưng trở nên quá lớn, MySQL sẽ tự động chuyển đổi nó thành bảng trên đĩa. Kích thước tối đa cho các bảng tạm thời trong bộ nhớ được xác định bởi giá trị TEMPTABLE5 hoặc TEMPTABLE6, tùy theo mức nào nhỏ hơn. Điều này khác với các bảng TEMPTABLE2 được tạo rõ ràng bằng TEMPTABLE8. Đối với các bảng như vậy, chỉ có biến TEMPTABLE6 xác định mức độ lớn của bảng có thể phát triển và không có chuyển đổi sang định dạng trên đĩa.

Biến UNION0 xác định công cụ lưu trữ mà máy chủ sử dụng để quản lý các bảng tạm thời nội bộ trên đĩa. Các giá trị được phép là UNION1 [mặc định] và UNION2.

Khi một bảng tạm thời nội bộ được tạo trong bộ nhớ hoặc trên đĩa, máy chủ sẽ tăng giá trị UNION3. Khi một bảng tạm thời nội bộ được tạo trên đĩa, máy chủ sẽ tăng giá trị UNION4. Nếu quá nhiều bảng tạm thời nội bộ được tạo trên đĩa, hãy xem xét việc tăng cài đặt TEMPTABLE5 và TEMPTABLE6.

Định dạng lưu trữ bảng tạm thời nội bộ

Các bảng tạm thời trong bộ nhớ được quản lý bởi công cụ lưu trữ TEMPTABLE2, sử dụng định dạng hàng có độ dài cố định. Các giá trị cột UNION8 và UNION9 được đệm theo chiều dài cột tối đa, có hiệu lực lưu trữ chúng dưới dạng cột ORDER BY0 và ORDER BY1.

Các bảng tạm thời trên đĩa được quản lý bởi công cụ lưu trữ TEMPTABLE3 hoặc TEMPTABLE4 [tùy thuộc vào cài đặt UNION0]. Cả hai động cơ lưu trữ các bảng tạm thời sử dụng định dạng hàng có chiều rộng động. Các cột chỉ mất bao nhiêu lưu trữ khi cần, giúp giảm I/O đĩa, yêu cầu không gian và thời gian xử lý so với các bảng trên đĩa sử dụng các hàng có độ dài cố định.

Đối với các câu lệnh ban đầu tạo bảng tạm thời nội bộ trong bộ nhớ, sau đó chuyển đổi nó thành bảng trên đĩa, hiệu suất tốt hơn có thể đạt được bằng cách bỏ qua bước chuyển đổi và tạo bảng trên đĩa để bắt đầu. Biến ORDER BY5 có thể được sử dụng để buộc lưu trữ đĩa của các bảng tạm thời bên trong.

Chủ Đề