Có một số tùy chọn có thể khiến các bảng tạm thời cụ thể hóa thành các bảng MyISAM hoặc có thể được cấu hình để trì hoãn nó. Hãy ghi nhớ rằng cho các bảng tạm thời dựa trên đĩa, không có .frm
tác phẩm, nhưng chỉ .MYD
và .MYI
file (tất nhiên. File .MYI không bao giờ được sử dụng vì nó là chỉ số không thể một bảng temp nội bộ).
Dưới đây là các tùy chọn:
Bạn cũng nên xem xét Tài liệu MySQL về Sử dụng Bảng Temp Nội bộ
Các tình huống trong đó các bảng tạm thời trong bộ nhớ được thực hiện là
- Nếu có mệnh đề ORDER BY và mệnh đề GROUP BY khác hoặc nếu 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 nối, một bảng tạm thời được tạo.
- DISTINCT kết hợp với ORDER BY có thể yêu cầu một bảng tạm thời.
- Nếu bạn sử dụng tùy chọn SQL_SMALL_RESULT, 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.
Khi bảng tạm thời trong bộ nhớ vượt quá mức tối thiểu (tmp_table_size hoặc max_heap_table_size), mysqld thực hiện như sau:
- Tạm dừng truy vấn
- Sao chép nội dung của bảng trong bộ nhớ vào bảng tạm thời MyISAM
- Loại bỏ bảng trong bộ nhớ
- Tiếp tục truy vấn, gửi dữ liệu tạm thời vào bảng tạm thời MyISAM
Các tình huống trong đó các bảng tạm thời trong bộ nhớ được bỏ qua có lợi cho đĩa là
- Sự hiện diện của cột BLOB hoặc văn bản trong bảng
- Sự hiện diện của bất kỳ cột nào trong mệnh đề GROUP BY hoặc DISTINCT lớn hơn 512 byte
- Sự hiện diện của bất kỳ cột nào lớn hơn 512 byte trong danh sách CHỌN, nếu UNION hoặc UNION ALL được sử dụng
Một số sự tích cực là cần thiết để giảm việc tạo bảng tạm thời trên đĩa
- Đặt tham gia_buffer_size lớn hơn
- Đặt sort_buffer_size lớn hơn
- Đặt tmp_table_size và max_heap_table_size lớn hơn
- Điều chỉnh truy vấn để giảm thiểu hoặc thậm chí ngăn các bảng tạm thời
- Tạo các chỉ mục để tạo chế độ xem dữ liệu được định sẵn từ các bảng riêng lẻ
- Cài đặt thêm RAM để chứa các bảng tạm thời trong bộ nhớ lớn
Nếu sau khi siêng năng như vậy, vẫn còn các bảng tạm thời được hình thành trên Đĩa, thì đây là một động thái tuyệt vọng: Ánh xạ tạo bảng tạm thời dựa trên đĩa vào bộ nhớ.
Đây là một cách nhanh chóng và bẩn thỉu để thiết lập Đĩa RAM 16 GB bằng tmpdir
BƯỚC01) Tạo thư mục đĩa RAM
mkdir /var/mysql_tmpfs
BƯỚC02) Thêm cái này vào my.cnf
[mysqld]
tmpdir=/var/mysql_tmpfs
BƯỚC03) Thêm cái này vào / etc / fstab
echo "none /var/mysql_tmpfs tmpfs defaults,size=16g 1 2" >> /etc/fstab
BƯỚC04) Tải lại / etc / fstab
mount -a
BƯỚC05) service mysql restart
Sau này, tất cả bảng tạm thời trở thành MyISAM được ghi vào Đĩa RAM. Điều này sẽ tăng tốc độ tạo bảng tạm thời dựa trên đĩa.
Hãy thử một lần !!!
filesort
và 6405 là bộ vi xử lý của mysql để tách các tệp tạm thời khỏi các phiên bản máy chủ khác nhau.