Hướng dẫn order by case mysql - đặt hàng theo trường hợp mysql
3.3.4.4 & nbsp; Sắp xếp hàngBạn có thể nhận thấy trong các ví dụ trước rằng các hàng kết quả được hiển thị không theo thứ tự cụ thể. Nó thường dễ dàng hơn để kiểm tra đầu ra truy vấn khi các hàng được sắp xếp theo một cách nào đó có ý nghĩa. Để sắp xếp kết quả, sử dụng mệnh đề 0.Dưới đây là sinh nhật động vật, được sắp xếp theo ngày:
Trên các cột loại ký tự, sắp xếp, giống như tất cả các hoạt động so sánh khác, thường được thực hiện theo kiểu không nhạy cảm trường hợp. Điều này có nghĩa là thứ tự không được xác định cho các cột giống hệt nhau ngoại trừ trường hợp của chúng. Bạn có thể buộc một loại nhạy cảm trường hợp cho một cột bằng cách sử dụng 1 như vậy: 2.Thứ tự sắp xếp mặc định là tăng dần, với các giá trị nhỏ nhất trước. Để sắp xếp theo thứ tự ngược (giảm dần), hãy thêm từ khóa 3 vào tên của cột bạn đang sắp xếp bằng cách:
Bạn có thể sắp xếp trên nhiều cột và bạn có thể sắp xếp các cột khác nhau theo các hướng khác nhau. Ví dụ, để sắp xếp theo loại động vật theo thứ tự tăng dần, sau đó vào ngày sinh trong loại động vật theo thứ tự giảm dần (Động vật trẻ nhất đầu tiên), sử dụng truy vấn sau:
Từ khóa 3 chỉ áp dụng cho tên cột ngay trước nó ( 5); Nó không ảnh hưởng đến thứ tự sắp xếp cột 6. 8.2.1.16 & nbsp; Đặt hàng bằng cách tối ưu hóaPhần này mô tả khi MySQL có thể sử dụng chỉ mục để đáp ứng điều khoản 7, hoạt động 8 được sử dụng khi không thể sử dụng chỉ mục và thông tin kế hoạch thực thi có sẵn từ trình tối ưu hóa khoảng 7.Một 7 có và không có 1 có thể trả lại các hàng theo các đơn đặt hàng khác nhau, như được thảo luận trong Phần & NBSP; 8.2.1.19, Tối ưu hóa truy vấn giới hạn.
Sử dụng các chỉ mục để đáp ứng trật tự bằng cáchSử dụng filesort để đáp ứng trật tự bằng cách Ảnh hưởng đến trật tự bằng cách tối ưu hóa Trong một số trường hợp, MySQL có thể sử dụng một chỉ mục để đáp ứng điều khoản 7 và tránh việc sắp xếp thêm liên quan đến việc thực hiện hoạt động 8.
Trong một số trường hợp, MySQL không thể sử dụng các chỉ mục để giải quyết 7, mặc dù nó vẫn có thể sử dụng các chỉ mục để tìm các hàng phù hợp với mệnh đề 6. Ví dụ:cannot use indexes to resolve the 7, although it may still use indexes to find the rows that match the 6 clause. Examples:
Tính khả dụng của một chỉ mục để phân loại có thể bị ảnh hưởng bởi việc sử dụng các bí danh cột. Giả sử rằng cột 9 được lập chỉ mục. Trong câu lệnh này, tên của cột trong danh sách chọn là 0. Nó đề cập đến 9, cũng như tham chiếu đến 0 trong 7, do đó, chỉ mục trên 9 có thể được sử dụng: 4Trong tuyên bố này, tên của cột trong danh sách chọn cũng là 0, nhưng đó là tên bí danh. Nó đề cập đến 6, cũng như tham chiếu đến 0 trong 7, do đó, chỉ mục trên 9 không thể được sử dụng: 5Trong câu lệnh sau, 7 đề cập đến một tên không phải là tên của một cột trong danh sách chọn. Nhưng có một cột trong 6 có tên 0, do đó 4 đề cập đến 9 và chỉ số trên 9 có thể được sử dụng. (Tất nhiên, thứ tự sắp xếp kết quả có thể hoàn toàn khác với thứ tự cho 6, tất nhiên.) 6Trước đây (MySQL 5.7 trở xuống), 3 được sắp xếp ngầm trong một số điều kiện nhất định. Trong MySQL 8.0, điều đó không còn xảy ra nữa, do đó việc chỉ định 08 ở cuối để triệt tiêu phân loại ngầm (như đã thực hiện trước đó) không còn cần thiết nữa. Tuy nhiên, kết quả truy vấn có thể khác với các phiên bản MySQL trước đó. Để tạo ra một đơn đặt hàng sắp xếp nhất định, cung cấp một mệnh đề 7.Sử dụng filesort để đáp ứng trật tự bằng cáchNếu một chỉ mục không thể được sử dụng để đáp ứng mệnh đề 4, MySQL thực hiện thao tác 8 đọc các hàng bảng và sắp xếp chúng. Một 8 tạo thành một giai đoạn sắp xếp thêm trong thực thi truy vấn.Để có được bộ nhớ cho các hoạt động 8, kể từ MySQL 8.0.12, trình tối ưu hóa phân bổ bộ đệm bộ nhớ tăng dần khi cần, theo kích thước được chỉ ra bởi biến hệ thống 14, thay vì phân bổ một lượng 14 cố định trước đến MySQL 8.0.12. Điều này cho phép người dùng đặt 14 thành các giá trị lớn hơn để tăng tốc các loại lớn hơn, mà không quan tâm đến việc sử dụng bộ nhớ quá mức cho các loại nhỏ. (Lợi ích này có thể không xảy ra đối với nhiều loại đồng thời trên Windows, có đa luồng yếu 17.)Hoạt động 8 sử dụng các tệp đĩa tạm thời khi cần thiết nếu tập kết quả quá lớn để phù hợp với bộ nhớ. Một số loại truy vấn đặc biệt phù hợp với các hoạt động 8 hoàn toàn trong bộ nhớ. Ví dụ: trình tối ưu hóa có thể sử dụng 8 để xử lý hiệu quả trong bộ nhớ, mà không cần tệp tạm thời, hoạt động 7 cho các truy vấn (và các nhóm phụ) của mẫu sau: 7Các truy vấn như vậy là phổ biến trong các ứng dụng web chỉ hiển thị một vài hàng từ một tập kết quả lớn hơn. Ví dụ: 8Ảnh hưởng đến trật tự bằng cách tối ưu hóaĐối với các truy vấn 7 chậm mà 8 không được sử dụng, hãy thử hạ biến hệ thống 24 xuống một giá trị phù hợp để kích hoạt 8. . Tính đến 8.0.20, 24 không được dùng để thay đổi trình tối ưu hóa khiến nó lỗi thời và không có hiệu lực.Để tăng tốc độ 7, hãy kiểm tra xem bạn có thể nhờ MySQL sử dụng các chỉ mục thay vì pha sắp xếp thêm. Nếu điều này là không thể, hãy thử các chiến lược sau:
Đặt hàng theo thông tin kế hoạch thực thi có sẵnVới 0 (xem Phần & NBSP; 8.8.1, Tối ưu hóa các truy vấn với giải thích), bạn có thể kiểm tra xem MySQL có thể sử dụng các chỉ mục để giải quyết mệnh đề 4 không:
Ngoài ra, nếu A 8 được thực hiện, đầu ra theo dõi tối ưu hóa bao gồm một khối 48. Ví dụ: 9
49 chỉ ra bộ nhớ tối đa được sử dụng tại bất kỳ thời điểm nào trong thời gian sắp xếp. Đây là một giá trị lên đến nhưng không nhất thiết phải lớn bằng giá trị của biến hệ thống 14. Trước MySQL 8.0.12, đầu ra hiển thị 14 thay vào đó, cho biết giá trị của 14. . )Giá trị 55 cung cấp thông tin về nội dung của bộ dữ liệu trong bộ đệm sắp xếp:
0 không phân biệt liệu trình tối ưu hóa có hoặc không thực hiện 8 trong bộ nhớ hay không. Có thể thấy việc sử dụng một 8 trong bộ nhớ trong đầu ra theo dõi trình tối ưu hóa. Tìm kiếm 62. Để biết thông tin về dấu vết của trình tối ưu hóa, hãy xem MySQL Internals: Truy tìm Trình tối ưu hóa. |