2010-07-19 20 views
5

tôi đang tạo ra một bảng tạm thời với một truy vấn như thế này:Đưa chỉ mục vào bảng tạm thời từ bảng thông thường?

CREATE TEMPORARY TABLE temp_table 
SELECT * FROM regular_table 
WHERE 1 

Nhưng regular_table có chỉ mục toàn văn trên một số lĩnh vực. Tôi cố gắng thực hiện tìm kiếm FULLTEXT trên bảng tạm thời mới và tôi gặp lỗi khi nói cho tôi "Không thể tìm thấy chỉ mục FULLTEXT khớp với danh sách cột". Vì vậy, obviusly chỉ số không phải là sao chép sang bảng mới. Có cách nào để ép buộc điều này không?

Cảm ơn.

Trả lời

10

Bạn có thể sử dụng CREATE TEMPORARY TABLE temp_table LIKE regular_table, nhưng điều đó sẽ tạo tất cả các chỉ số, vì vậy khi bạn làm INSERT INTO temp_table SELECT * FROM regular_table, các chỉ số sẽ được xây dựng lại - mà có thể là dài.

Hoặc, bạn có thể tạo bảng và thêm các chỉ số sau:

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
INSERT INTO temp_table SELECT * FROM regular_table 

nhưng chỉ số sẽ được, một lần nữa, được cập nhật trên tất cả các chèn.

Có lẽ cách hiệu quả nhất sẽ được để tạo ra các bảng temp, chèn tất cả, xây dựng chỉ số sau:

CREATE TEMPORARY TABLE temp_table 
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz) 
ALTER TABLE temp_table DISABLE KEYS 
INSERT INTO temp_table SELECT * FROM regular_table 
ALTER TABLE temp_table ENABLE KEYS 

Một lần nữa, bạn sẽ phải chờ đợi cho các chỉ số để xây dựng, ngoại trừ nó sẽ xảy ra trong một đoạn, với câu lệnh ALTER cuối cùng.

+0

Cảm ơn bạn! .. Đây có lẽ là một cái nhìn nhỏ nhưng tôi tin rằng bạn phải đặt 'ALTER TABLE tablename' Tôi đã nhận một lỗi chỉ với' ALTER tablename' .. Cảm ơn bạn đã thông tin! –

+0

@ John Isaacks: bạn được chào đón; cảm ơn sự chỉnh sửa - chỉnh sửa. – Piskvor

2

Bảng tạm thời hoàn toàn giống với bất kỳ bảng nào khác ngoại trừ bảng sẽ bị xóa vào cuối phiên. Cách duy nhất để có cùng các chỉ mục (từ bên trong cơ sở dữ liệu) là tạo chúng trên bảng như bạn làm với bất kỳ bảng nào khác.

Hiện có một chút hack. Bạn có thể sao chép các tập tin vật lý trên đĩa vào một tên mới và có một bản sao của bảng bao gồm các chỉ mục nhưng tôi giả sử bạn đang làm điều này trong một ứng dụng để có thể không thực tế lắm.

+0

Lưu ý: điều này chỉ hoạt động đối với MyISAM (không phải InnoDB hoặc những người khác) và có thể yêu cầu đặc quyền root. – Piskvor

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