MySQL vẫn xử lý các chỉ mục theo cách này?


8

Việc bỏ một chỉ mục trùng lặp trong MySQL mất khá nhiều thời gian, vì vậy trong khi chờ đợi, tôi đã tìm kiếm về nó và tìm thấy bài đăng này từ năm 2006, nói về cách xử lý ADDDROPlập chỉ mục của MySQL .

Nếu bảng T là bảng MySQL có bốn chỉ mục (ndx1, ndx2, ndx3, ndx4) và bạn muốn 'thay đổi bảng T thả chỉ mục ndx3;' đây chính xác là những gì xảy ra dưới mui xe:

1) MySQL sao chép T.MYD vào bảng tạm thời, ví dụ: S.MYD và S.MYI byte không. 2) MySQL không 'thay đổi bảng S thêm chỉ mục ndx1 (...); 3) MySQL không 'thay đổi bảng S thêm chỉ mục ndx2 (...); 4) MySQL không 'thay đổi bảng S thêm chỉ mục ndx4 (...); 5) MySQL xóa T.MYD và xóa T.MYI 6) MySQL đổi tên S.MYD thành T.MYD và đổi tên S.MYI thành T.MYI

Điều này có còn đúng không? Là lời khuyên của anh ấy vẫn còn hiệu lực?

Cho cùng bảng MyISAM T có bốn chỉ mục (ndx1, ndx2, ndx3, ndx4) và bạn muốn 'thay đổi bảng T thả chỉ số ndx3;' thay vào đó hãy thử:

1) tạo bảng T1 như T; Điều này tạo ra một bảng trống T1 với các chỉ mục ndx1, ndx2, ndx3 và ndx4. 2) thay đổi bảng chỉ số thả T1 ndx3; Điều này làm giảm chỉ số ndx3 trên T1 trống, sẽ là tức thời. 3) chèn vào T1 chọn * từ T; Điều này sẽ điền vào bảng T và tải cả ba (3) chỉ mục cho T1 trong một lần. 4) thả bảng T; 5) thay đổi bảng T1 đổi tên thành T;

Làm thế nào để tất cả các bạn xử lý việc thêm và xóa chỉ mục từ các bảng lớn?

Câu trả lời:


14

Đây là cách MySQL 4.x đã làm điều này và nó được sử dụng để gây khó chịu cho tôi.

Trên thực tế, có một công thức tôi đã tính toán về việc cần bao nhiêu thao tác chỉ số như vậy

Table with 0 indexes and adding 1 index tooks 1 temp table
Table with 1 index   and adding 1 index tooks 3 temp tables
Table with 2 indexes and adding 1 index tooks 6 temp tables
Table with 3 indexes and adding 1 index tooks 10 temp tables (I had eyewitnessed this !!!)
.
.
.
Table with n indexes and adding 1 index took (n + 1) X (n + 2) / 2 temp tables
.
.
.
Table with 16 indexes and adding 1 index took 153 temp tables

Tin tốt, MySQL 5.x không làm điều đó !!!

Nếu MySQL 5.x đã làm điều này, tôi sẽ trở thành một DBA PostgreSQL ngày hôm nay (Không vi phạm PostgreQuery, đó là một RDBMS tuyệt vời theo đúng nghĩa của nó).

CẬP NHẬT

Ôi trời, tôi đọc bài !!! Bài đăng đó đến từ tôi !!!

Tôi không bao giờ nghĩ rằng ai đó sẽ đào bài này lên.

Hãy để lại những thứ như thế này chết và chôn cất. Bây giờ tôi đang có hồi tưởng !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.