8.2.1.16 & nbsp; Đặt hàng bằng cách tối ưu hóa
Phần này mô tả khi MySQL có thể sử dụng chỉ mục để đáp ứng điều khoản
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7, hoạt động SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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 SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7.Một
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7 có và không có SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
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ách
Sử 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
Đặt hàng theo thông tin kế hoạch thực thi có sẵn
Sử 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
Đặt hàng theo thông tin kế hoạch thực thi có sẵn
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 độngSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
8.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
SELECT * FROM t1 ORDER BY key_part1, key_part2;
Chỉ số cũng có thể được sử dụng ngay cả khi
4 không khớp chính xác với chỉ mục, miễn là tất cả các phần không được sử dụng của chỉ số và tất cả các cộtSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
7 là hằng số trong mệnh đềSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
6. Nếu chỉ mục không chứa tất cả các cột được truy vấn truy cập, chỉ mục chỉ được sử dụng nếu truy cập chỉ mục rẻ hơn các phương thức truy cập khác.SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
Giả sử rằng có một chỉ mục trên
7,SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
8], các truy vấn sau đây có thể sử dụng chỉ mục để giải quyết phầnSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
7. Liệu trình tối ưu hóa thực sự có làm như vậy hay không phụ thuộc vào việc đọc chỉ mục có hiệu quả hơn so với quét bảng hay không nếu các cột không trong chỉ mục cũng phải được đọc.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Trong truy vấn này, chỉ mục trên
7,SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
8] cho phép trình tối ưu hóa để tránh sắp xếp:SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
Tuy nhiên, truy vấn sử dụng
2, có thể chọn nhiều cột hơnSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
3 vàSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
8. Trong trường hợp đó, việc quét toàn bộ chỉ mục và tìm kiếm các hàng bảng để tìm các cột không có trong chỉ mục có thể đắt hơn so với quét bảng và sắp xếp kết quả. Nếu vậy, trình tối ưu hóa có thể không sử dụng chỉ mục. NếuSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
2 chỉ chọn các cột chỉ mục, chỉ số sẽ được sử dụng và sắp xếp.SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
Nếu
6 là bảngSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
7, khóa chính của bảng hoàn toàn là một phần của chỉ mục và chỉ mục có thể được sử dụng để giải quyếtSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
7 cho truy vấn này:SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Trong truy vấn này,
3 không đổi, do đó, tất cả các hàng được truy cập thông qua chỉ mục đều theo thứ tự ____28 và một chỉ mục trênSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
7,SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
8] Tránh sắp xếp nếu mệnh đềSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
6 đủ chọn lọc để tạo ra phạm vi chỉ số rẻ hơn so với quét bảng:SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
Trong hai truy vấn tiếp theo, liệu chỉ mục có được sử dụng tương tự như cùng một truy vấn mà không có
4 được hiển thị trước đó:SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
Hai cột trong một
7 có thể sắp xếp theo cùng một hướng [cảSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
6 hoặc cảSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
4] hoặc theo hướng ngược lại [mộtSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
6, mộtSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
4]. Một điều kiện để sử dụng chỉ số là chỉ số phải có cùng tính đồng nhất, nhưng không cần phải có cùng một hướng thực tế. Nếu một truy vấn trộnSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
6 vàSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
4, trình tối ưu hóa có thể sử dụng một chỉ mục trên các cột nếu chỉ mục cũng sử dụng các cột tăng dần và giảm dần tương ứng:SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
Trình tối ưu hóa có thể sử dụng một chỉ mục trên [
3,SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
8] nếuSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
3 đang giảm vàSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
8 đang tăng dần. Nó cũng có thể sử dụng một chỉ mục trên các cột đó [với quét ngược] nếuSELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
3 tăng dần vàSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
8 đang giảm dần. Xem Phần & NBSP; 8.3.13, Chỉ số giảm dần.SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
SELECT * FROM t1 WHERE key_part1 = constant1 AND key_part2 > constant2 ORDER BY key_part2;
Trong hai truy vấn tiếp theo,
SELECT * FROM t1
ORDER BY key_part1 DESC, key_part2 DESC;
SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2 DESC;
3 được so sánh với một hằng số. Chỉ mục được sử dụng nếu mệnh đề SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
6 đủ chọn lọc để làm cho một phạm vi chỉ mục quét rẻ hơn so với quét bảng:cannot use indexes to resolve the SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7, although it may still use indexes to find the rows that match the SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
6 clause. Examples: SELECT * FROM t1 WHERE key_part1 > constant ORDER BY key_part1 ASC; SELECT * FROM t1 WHERE key_part1 < constant ORDER BY key_part1 DESC;
SELECT * FROM t1 ORDER BY key1, key2;
Trong truy vấn tiếp theo,
7 không đặt tênSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
3, nhưng tất cả các hàng được chọn đều có giá trịSELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
3 hằng số, do đó chỉ mục vẫn có thể được sử dụng:SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2 DESC;
SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
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 đềSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
6. Ví dụ:SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2;
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
Truy vấn sử dụng
7 trên các chỉ mục khác nhau:SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
0SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Truy vấn sử dụng
7 trên các phần không liên tục của một chỉ mục:SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Chỉ số được sử dụng để tìm nạp các hàng khác với dấu được sử dụng trong
7:SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Truy vấn sử dụng
7 với biểu thức bao gồm các thuật ngữ khác với tên cột chỉ mục:SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Chỉ số không lưu trữ các hàng theo thứ tự. Ví dụ, điều này đúng với chỉ mục
7 trong bảngSELECT * FROM t1 ORDER BY key1, key2;
8.SELECT * FROM t1 ORDER BY key1, key2;
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
SELECT * FROM t1 ORDER BY key1, key2;
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à SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
0. Nó đề cập đến SELECT * FROM t1 ORDER BY key1, key2;
9, cũng như tham chiếu đến SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
0 trong SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7, do đó, chỉ mục trên SELECT * FROM t1 ORDER BY key1, key2;
9 có thể được sử dụng:SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
1Trong tuyên bố này, tên của cột trong danh sách chọn cũng là
SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
0, nhưng đó là tên bí danh. Nó đề cập đến SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
6, cũng như tham chiếu đến SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
0 trong SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7, do đó, chỉ mục trên SELECT * FROM t1 ORDER BY key1, key2;
9 không thể được sử dụng:SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
2Trong câu lệnh sau,
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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 SELECT * FROM t1
ORDER BY key_part1 DESC, key_part2 DESC;
SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2 DESC;
6 có tên SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
0, do đó SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
4 đề cập đến SELECT * FROM t1 ORDER BY key1, key2;
9 và chỉ số trên SELECT * FROM t1 ORDER BY key1, key2;
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 SELECT * FROM t1 WHERE key2=constant ORDER BY key1_part1, key1_part3;
6, tất nhiên.]SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
3Trước đây [MySQL 5.7 trở xuống],
SELECT * FROM t1 ORDER BY key1, key2;
3 được sắp xếp ngầm trong các điều kiện nhất định. Trong MySQL 8.0, điều đó không còn xảy ra, do đó việc chỉ định SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
8 ở cuối để triệt tiêu việc sắp xếp 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 đề SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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 để thỏa mãn mệnh đề
SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
4, MySQL thực hiện thao tác SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 đọc các hàng bảng và sắp xếp chúng. Một SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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 ____104 đến MySQL 8.0.12. Điều này cho phép người dùng đặt SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
04 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 SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
07.]Hoạt động
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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 SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 hoàn toàn trong bộ nhớ. Ví dụ: trình tối ưu hóa có thể sử dụng SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 để xử lý hiệu quả trong bộ nhớ, mà không cần tệp tạm thời, hoạt động SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7 cho các truy vấn [và các nhóm phụ] của mẫu sau:SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
4Cá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ụ:
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
5Ảnh hưởng đến trật tự bằng cách tối ưu hóaĐối với các truy vấn
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
7 chậm mà SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 không được sử dụng, hãy thử hạ biến hệ thống SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
14 xuống một giá trị phù hợp để kích hoạt SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8. . Tính đến 8.0.20, SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
14 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 độ
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
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ăng giá trị biến
04. Lý tưởng nhất, giá trị phải đủ lớn cho toàn bộ kết quả được đặt phù hợp với bộ đệm sắp xếp [để tránh ghi vào đĩa và hợp nhất đường chuyền].SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Có tính đến kích thước của các giá trị cột được lưu trữ trong bộ đệm sắp xếp bị ảnh hưởng bởi giá trị biến hệ thống
19. Ví dụ: nếu Tuples lưu trữ các giá trị của các cột chuỗi dài và bạn tăng giá trị củaSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
19, kích thước của bộ đệm bộ đệm sắp xếp cũng tăng và có thể yêu cầu bạn tăngSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
04.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Để theo dõi số lượng đường chuyền hợp nhất [để hợp nhất các tệp tạm thời], hãy kiểm tra biến trạng thái
22.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Tăng giá trị biến
23 để nhiều hàng được đọc cùng một lúc.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Thay đổi biến hệ thống
24 để trỏ đến một hệ thống tệp chuyên dụng với một lượng lớn không gian trống. Giá trị thay đổi có thể liệt kê một số đường dẫn được sử dụng theo kiểu vòng tròn; Bạn có thể sử dụng tính năng này để trải đều tải trên một số thư mục. Tách các đường dẫn bằng các ký tự đại tràng [SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
25] trên các ký tự UNIX và SEMICOLON [SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
26] trên Windows. Các đường dẫn nên đặt tên cho các thư mục trong các hệ thống tệp nằm trên các đĩa vật lý khác nhau, không phải các phân vùng khác nhau trên cùng một đĩa.physical disks, not different partitions on the same disk.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Với
SELECT * FROM t1 ORDER BY key1, key2;
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 đề SELECT * FROM t1
WHERE key_part1 = constant
ORDER BY key_part2;
4 không:Nếu cột
29 của đầu raSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
0 không chứaSELECT * FROM t1 ORDER BY key1, key2;
31, chỉ số được sử dụng và không được thực hiệnSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
8.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Nếu cột
29 của đầu raSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
0 chứaSELECT * FROM t1 ORDER BY key1, key2;
31, chỉ số không được sử dụng vàSELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
8 được thực hiện.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
Ngoài ra, nếu một
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 được thực hiện, đầu ra theo dõi tối ưu hóa bao gồm một khối SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
38. Ví dụ:SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
6
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
39 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 SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
04. Trước MySQL 8.0.12, đầu ra hiển thị SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
04 thay vào đó, cho biết giá trị của SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
04. . ]Giá trị
SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
45 cung cấp thông tin về nội dung của bộ dữ liệu trong bộ đệm sắp xếp:
46: Điều này chỉ ra rằng bộ đệm bộ đệm sắp xếp là các cặp chứa giá trị khóa sắp xếp và ID hàng của hàng bảng gốc. Các bộ dữ liệu được sắp xếp theo giá trị khóa sắp xếp và ID hàng được sử dụng để đọc hàng từ bảng.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
47: Điều này chỉ ra rằng bộ đệm bộ đệm sắp xếp chứa giá trị khóa sắp xếp và các cột được tham chiếu bởi truy vấn. Các bộ dữ liệu được sắp xếp theo giá trị khóa sắp xếp và giá trị cột được đọc trực tiếp từ tuple.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
48: Giống như biến thể trước đó, nhưng các cột bổ sung được đóng gói chặt chẽ với nhau thay vì sử dụng mã hóa có độ dài cố định.SELECT pk, key_part1, key_part2 FROM t1 ORDER BY key_part1, key_part2;
SELECT * FROM t1 ORDER BY key1, key2;
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 SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 trong bộ nhớ hay không. Có thể thấy việc sử dụng một SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
8 trong bộ nhớ trong đầu ra theo dõi trình tối ưu hóa. Tìm kiếm SELECT pk, key_part1, key_part2 FROM t1
ORDER BY key_part1, key_part2;
52. Để 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.