2010-04-13 36 views
5

Tôi đang tìm cách di chuyển nhanh các bản ghi từ bảng MEMORY sang bảng MYISAM. Bảng MEMORY có khoảng 0,5 triệu bản ghi. Cả hai bảng đều có cấu trúc giống nhau (cùng một số cột, kiểu dữ liệu, v.v.). Nhưng bảng MYISAM được lập chỉ mục (B-TREE) trên một vài cột. Có khoảng 25 cột hầu hết trong số đó là số nguyên không dấu.Di chuyển hàng triệu bản ghi từ bảng MEMORY sang bảng MYISAM

Tôi đã thử sử dụng truy vấn "INSERT INTO SELECT * FROM". Nhưng có cách nào nhanh hơn để làm điều này không?

Đánh giá cao sự trợ giúp của bạn.

Prashant

Trả lời

0

Về nguyên tắc, bạn sẽ nhận được hiệu suất tốt bằng cách:

  1. Tạo bảng mục tiêu mà không chỉ thứ yếu.

  2. Sắp xếp nội dung của bảng nguồn trên khóa chính của bảng mục tiêu.

  3. Chèn bản ghi đã sắp xếp vào bảng mục tiêu.

  4. Thêm từng chỉ mục phụ.

+0

Vâng, ngoại trừ trong MyISAM, thêm một chỉ số thứ cấp phép tái xây dựng tất cả các chỉ số và các tập tin dữ liệu, vì vậy bạn thực sự muốn thêm tất cả các chỉ số cùng một lúc. – MarkR

0

Có thể phần lớn là điều chỉnh. Bảng MyISAM có rỗng không? Nếu vậy, bạn có thể thực hiện một vài cheats - vô hiệu hóa các chỉ mục trong khi tải, sau đó kích hoạt chúng (đây không phải là ý tưởng hay về một bảng không trống).

Thực hiện ORDER BY trên bảng bộ nhớ không phải là một ý tưởng tốt, vì chúng thường sử dụng chỉ mục băm, do đó không thể thực hiện quét chỉ mục theo thứ tự, vì vậy nó sẽ giới thiệu tệp bổ sung(). .

1

Một số khác được chỉ ra - bạn không nên sử dụng các chỉ mục trong khi chèn. Bạn có thể vô hiệu hóa cập nhật trên tất cả các chèn:

ALTER TABLE table DISABLE KEYS; 
INSERT INTO table 
ALTER TABLE tbl_name ENABLE KEYS; 

Và cũng có thể khóa một bảng để có được đơn index ghi:

LOCK TABLES table WRITE; 
INSERT INTO table 
UNLOCK TABLES; 

Dù sao, nếu bạn sử dụng nó trong một đơn INSERT ... SELECT bạn có thể không nhận được tăng hiệu suất đáng kể.

Bạn cũng có thể điều chỉnh cài đặt bulk_insert_buffer_size trong cấu hình máy chủ.

Thông tin thêm về: http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

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