2012-04-01 45 views
9

Tôi vừa di cư đến mysql 5.5.20 và tôi đã có một vấn đề hiệu suất với các bảng tạm thời. Tôi có một thủ tục lưu trữ tạo ra tám người trong số họ, tương tự như sau:InnoDB & Tạm thời bảng

create temporary table t_opened_today 
(
    portfolio_id  integer, 
    position_type_id tinyint, 
    open_value   decimal(12,2), 
    today_net   decimal(12,2) 
); 

Mở Mysql 5,5 nó có InnoDB như công cụ lưu trữ mặc định. Tôi đã từng ở trên 5.1 và đó không phải là trường hợp. vì vậy, nó đã tạo ra các bảng tạm thời với Innodb. Tôi đã xác minh điều này bằng cách xem/tmp và không thấy bất kỳ .MYI hoặc .MYD. Việc này mất 0,50 giây để thực hiện (hoặc nhiều hơn, thời gian thực hiện đang dội lên khắp nơi), điều đó thật lố bịch.

vì vậy, tôi đã sửa đổi định nghĩa bảng để bao gồm "Engine = MyISAM" và mất 0,00 giây (như người ta mong đợi) để làm gì ngoài việc tạo 8 bảng tạm thời và thoát.

Bất cứ ai cũng có một đầu mối tại sao phải mất quá lâu trong InnoDB để tạo ra các bảng tạm thời? Có lẽ việc tạo các bảng tạm thời bằng cách sử dụng công cụ lưu trữ mặc định là một số loại không lớn không?

Tôi đã không làm nhiều bất cứ điều gì để my.cnf như tôi chỉ lên và chạy. Tôi đã thiết lập tăng các bản ghi từ mặc định .. nhưng thats nó. Vì vậy, cấu hình là out-of-the-box.

cảm ơn!

Trả lời

2

Nếu bạn đang sử dụng cấu hình mặc định sau đó mysql sẽ sử dụng một không gian bảng duy nhất cho tất cả các bảng InnoDB mà có lẽ lý do tại sao nó là tương đối chậm để tạo bảng tạm thời của bạn. Tôi khuyên bạn nên sử dụng công cụ lưu trữ MEMORY (HEAP) cho các bảng tạm thời của bạn nếu bạn có đủ bộ nhớ.

+1

thx, mặc dù nó vẫn có vẻ kỳ lạ rằng việc tạo bảng tạm thời với động cơ InnoDB phải mất quá lâu! –

Các vấn đề liên quan