2009-04-07 28 views
17

Giả sử rằng thứ tự mặc định của MySQL-bàn (ISAM) được thay đổi bằng cách thực hiện:Mặc định loại đặt hàng trong MySQL (ALTER TABLE ... ORDER BY ...;)

ALTER TABLE tablename ORDER BY columnname ASC; 

Từ giờ trở đi , tôi đảm bảo để có được hồ sơ lấy ra từ bảng theo thứ tự của "columnname ASC" giả sử không có "ORDER BY" được quy định trong các truy vấn của tôi (tức là "SELECT * FROM tablename ở ĐÂU ... LIMIT 10;")?

Có bất kỳ trường hợp góc nào mà tôi cần phải biết không?

Cập nhật # 1: Cảm ơn rất nhiều đến Quassnoi đã chỉ ra chính xác rằng INSERT và DELETE gây rối trật tự. Điều này dẫn tôi đến những câu hỏi sau đây:

  • Còn UPDATE thì sao? Giả sử rằng không có INSERT hoặc DELETE nào được thực hiện cho bảng, nhưng chỉ cập nhật - thứ tự sắp xếp có còn nguyên vẹn không?
  • Giả sử rằng thêm và xóa được thực hiện - làm thế nào để "xây dựng lại" sự sắp xếp lại, nói một lần một ngày (trong trường hợp cụ thể này bàn chỉ thay đổi hàng ngày, vì vậy việc xây dựng lại nó hàng ngày sau khi các thay đổi được thực hiện vẫn nên được tạp chí OK!). REPAIR TABLE có sửa chữa nó hay phải thêm ALTER TABLE ... ORDER BY một lần nữa?

Trả lời

24

Từ documentation:

Lưu ý rằng bảng không còn theo thứ tự này sau khi chèn và xóa

Trên thực tế, nếu bạn phát hành SELECT ... ORDER BY bảng này, các tùy chọn để ALTER TABLE won 't tha cho bạn về những filesort, nhưng thay vì làm filesort nhanh hơn nhiều.

Sắp xếp một tập hợp đã đặt hàng tương đương với việc duyệt bộ này để đảm bảo mọi thứ đều OK.

Còn UPDATE thì sao? Giả sử rằng không có INSERT hoặc DELETE nào được thực hiện cho bảng, nhưng chỉ cập nhật - thứ tự sắp xếp có còn nguyên vẹn không?

Nếu bảng của bạn không chứa bất kỳ lĩnh vực năng động (như VARCHAR hoặc 'BLOB'), sau đó có lẽ hầu hếtMyISAM sẽ không di chuyển nó khi cập nhật.

Tôi sẽ không dựa vào hành vi này, tuy nhiên, nếu tôi đang xây dựng nhà máy điện hạt nhân hoặc thứ mà tôi được trả tiền.

Giả sử rằng thêm và xóa được thực hiện - làm thế nào để "xây dựng lại" sự sắp xếp lại, nói một lần một ngày (trong trường hợp cụ thể này bàn chỉ thay đổi hàng ngày, vì vậy việc xây dựng lại nó hàng ngày sau khi các thay đổi được thực hiện nên vẫn được OK!). REPAIR TABLE có sửa chữa nó hay phải thêm ALTER TABLE ... ORDER BY một lần nữa?

Bạn cần phải làm ALTER TABLE ... ORDER BY.

REPAIR chỉ sửa chữa cấu trúc vật lý của một bảng bị hỏng.

+0

Cảm ơn bạn rất nhiều vì đã trả lời nhanh chóng. Tôi đã thêm hai câu hỏi tiếp theo có liên quan đến câu trả lời của bạn. – knorv

+0

@Quassnoi tôi đã làm ALTER BẢNG ... ORDER BY và sau đó xóa một số hồ sơ, bảng của tôi đã không ồ ạt lên ..? tại sao vậy? – Basit

+0

@ Truy cập: Tôi không biết – Quassnoi

-1

Đặt hàng sắp xếp mặc định có vẻ như một nỗ lực lười biếng sẽ khiến bạn bị đau đầu. Tôi sẽ không chạm vào nó ở tất cả và chỉ cần chắc chắn để xác định Order By trong các truy vấn của tôi.

+12

Câu hỏi của tôi chưa được xác định theo một cách nào đó? Tôi không thấy bài viết của bạn có thể là câu trả lời cho câu hỏi rất cụ thể được hỏi. – knorv

+2

không thô lỗ, anh ấy chỉ muốn giúp đỡ !, nói chung, đề xuất của anh ấy có hợp lệ không? – dennisbot

3

Đặt hàng vật lý một cột có thể tiết kiệm được tải của IO. Đó là phương pháp hoàn toàn hợp pháp được sử dụng trong các hệ thống nâng cao để tăng tốc thời gian truy vấn. Bạn chỉ cần reorg dữ liệu mỗi bây giờ và sau đó do đó, nó vẫn clustered. Chỉ vì một số người không nghe nói về nó không có nghĩa là nó không tồn tại. - 25 năm kinh nghiệm thiết kế DB kỳ cựu.

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