8.4.5 & nbsp; giới hạn số lượng cơ sở dữ liệu và bảng
MySQL không có giới hạn về số lượng cơ sở dữ liệu. Hệ thống tệp cơ bản có thể có giới hạn về số lượng thư mục.
MySQL không có giới hạn về số lượng bảng. Hệ thống tệp cơ bản có thể có giới hạn về số lượng tệp đại diện cho các bảng. Động cơ lưu trữ cá nhân có thể áp đặt các ràng buộc cụ thể của động cơ. InnoDB
cho phép lên tới 4 tỷ bảng.
8.2.1.19 & nbsp; Tối ưu hóa truy vấn giới hạn
Nếu bạn chỉ cần một số lượng hàng được chỉ định từ một tập kết quả, hãy sử dụng mệnh đề LIMIT
trong truy vấn, thay vì tìm nạp toàn bộ bộ kết quả và vứt bỏ dữ liệu bổ sung.
MySQL đôi khi tối ưu hóa một truy vấn có mệnh đề LIMIT
row_count
và không có mệnh đề
0:mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 4 | 2 | 3.5 |
| 3 | 2 | 3.7 |
| 6 | 2 | 3.5 |
+----+----------+--------+
Nếu bạn chỉ chọn một vài hàng có
LIMIT
, MySQL sử dụng các chỉ mục trong một số trường hợp khi thông thường, nó muốn thực hiện quét bảng đầy đủ.Nếu bạn kết hợp
2 vớimysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
3, MySQL sẽ ngừng sắp xếp ngay khi nó tìm thấy các hàngmysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
4 đầu tiên của kết quả được sắp xếp, thay vì sắp xếp toàn bộ kết quả. Nếu đặt hàng được thực hiện bằng cách sử dụng một chỉ mục, điều này rất nhanh. Nếu một tệp phải được thực hiện, tất cả các hàng khớp với truy vấn mà không có mệnh đềmysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
LIMIT
được chọn và hầu hết hoặc tất cả chúng đều được sắp xếp, trước khi tìm thấy
4 đầu tiên. Sau khi các hàng ban đầu được tìm thấy, MySQL không sắp xếp bất kỳ phần còn lại của tập kết quả.mysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
Một biểu hiện của hành vi này là một truy vấn
3 có và không cómysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
LIMIT
có thể trả lại các hàng theo thứ tự khác nhau, như được mô tả sau trong phần này.Nếu bạn kết hợp
2 vớimysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
0, MySQL sẽ dừng ngay khi tìm thấy các hàng độc đáomysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
4.mysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
Trong một số trường hợp,
2 có thể được giải quyết bằng cách đọc chỉ mục theo thứ tự [hoặc thực hiện một sắp xếp trên chỉ mục], sau đó tính toán tóm tắt cho đến khi giá trị chỉ mục thay đổi. Trong trường hợp này,mysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
2 không tính toán bất kỳ giá trịmysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
2 không cần thiết nào.mysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
Ngay sau khi MySQL đã gửi số lượng hàng cần thiết cho máy khách, nó sẽ hủy bỏ truy vấn trừ khi bạn đang sử dụng
5. Trong trường hợp đó, số lượng hàng có thể được lấy bằngmysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
6. Xem Phần & NBSP; 12.16, Chức năng thông tin của Google.mysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
7 nhanh chóng trả lại một bộ trống. Điều này có thể hữu ích để kiểm tra tính hợp lệ của một truy vấn. Nó cũng có thể được sử dụng để có được các loại cột kết quả trong các ứng dụng sử dụng API MySQL cung cấp siêu dữ liệu kết quả. Với chương trình máy khách MySQL, bạn có thể sử dụng tùy chọnmysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
8 để hiển thị các loại cột kết quả.mysql client program, you can use themysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
8 option to display result column types.mysql> SELECT * FROM ratings ORDER BY category, id; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | | 2 | 3 | 5.0 | | 7 | 3 | 2.7 | +----+----------+--------+ mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 3 | 2 | 3.7 | | 4 | 2 | 3.5 | | 6 | 2 | 3.5 | +----+----------+--------+
Nếu máy chủ sử dụng các bảng tạm thời để giải quyết truy vấn, nó sẽ sử dụng mệnh đề
2 để tính toán số lượng không gian được yêu cầu.mysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
Nếu một chỉ mục không được sử dụng cho
3 nhưng điều khoảnmysql> SELECT * FROM ratings ORDER BY category LIMIT 5; +----+----------+--------+ | id | category | rating | +----+----------+--------+ | 1 | 1 | 4.5 | | 5 | 1 | 3.2 | | 4 | 2 | 3.5 | | 3 | 2 | 3.7 | | 6 | 2 | 3.5 | +----+----------+--------+
LIMIT
cũng có mặt, trình tối ưu hóa có thể tránh sử dụng tệp hợp nhất và sắp xếp các hàng trong bộ nhớ bằng cách sử dụng thao tác
2 trong bộ nhớ.# Create and populate a table t: mysql> CREATE TABLE t [ -> id1 BIGINT NOT NULL, -> id2 BIGINT NOT NULL, -> c1 VARCHAR[50] NOT NULL, -> c2 VARCHAR[50] NOT NULL, -> PRIMARY KEY [id1], -> INDEX i [id2, c1] -> ]; # [Insert some rows into table t - not shown]
Nếu nhiều hàng có giá trị giống hệt nhau trong các cột
# Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
3, máy chủ có thể tự do trả lại các hàng đó theo bất kỳ thứ tự nào và có thể làm như vậy khác nhau tùy thuộc vào kế hoạch thực thi tổng thể. Nói cách khác, thứ tự sắp xếp của các hàng đó là không liên quan đến các cột không được đặt hàng. Một yếu tố ảnh hưởng đến kế hoạch thực hiện là LIMIT
, do đó, một truy vấn
mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 4 | 2 | 3.5 |
| 3 | 2 | 3.7 |
| 6 | 2 | 3.5 |
+----+----------+--------+
3 có và không có LIMIT
có thể trả lại các hàng theo các đơn đặt hàng khác nhau. Hãy xem xét truy vấn này, được sắp xếp theo cột # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
7 nhưng không phải là không liên quan đến các cột # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
8 và # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
9:mysql> SELECT * FROM ratings ORDER BY category;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 3 | 2 | 3.7 |
| 4 | 2 | 3.5 |
| 6 | 2 | 3.5 |
| 2 | 3 | 5.0 |
| 7 | 3 | 2.7 |
+----+----------+--------+
Bao gồm LIMIT
có thể ảnh hưởng đến thứ tự của các hàng trong mỗi giá trị
# Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
7. Ví dụ: đây là kết quả truy vấn hợp lệ:mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 4 | 2 | 3.5 |
| 3 | 2 | 3.7 |
| 6 | 2 | 3.5 |
+----+----------+--------+
Trong mỗi trường hợp, các hàng được sắp xếp theo cột
# Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
3, đó là tất cả những gì được yêu cầu theo tiêu chuẩn SQL. Nếu điều quan trọng là đảm bảo cùng một thứ tự hàng có và không có LIMIT
, bao gồm các cột bổ sung trong mệnh đề
mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 4 | 2 | 3.5 |
| 3 | 2 | 3.7 |
| 6 | 2 | 3.5 |
+----+----------+--------+
3 để thực hiện lệnh xác định. Ví dụ: nếu các giá trị # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
8 là duy nhất, bạn có thể tạo các hàng cho giá trị # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
7 đã cho xuất hiện theo thứ tự # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
8 bằng cách sắp xếp như thế này:mysql> SELECT * FROM ratings ORDER BY category, id;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 3 | 2 | 3.7 |
| 4 | 2 | 3.5 |
| 6 | 2 | 3.5 |
| 2 | 3 | 5.0 |
| 7 | 3 | 2.7 |
+----+----------+--------+
mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 3 | 2 | 3.7 |
| 4 | 2 | 3.5 |
| 6 | 2 | 3.5 |
+----+----------+--------+
Đối với một truy vấn có mệnh đề
mysql> SELECT * FROM ratings ORDER BY category LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 4 | 2 | 3.5 |
| 3 | 2 | 3.7 |
| 6 | 2 | 3.5 |
+----+----------+--------+
3 hoặc mysql> SELECT * FROM ratings ORDER BY category, id;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 3 | 2 | 3.7 |
| 4 | 2 | 3.5 |
| 6 | 2 | 3.5 |
| 2 | 3 | 5.0 |
| 7 | 3 | 2.7 |
+----+----------+--------+
mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5;
+----+----------+--------+
| id | category | rating |
+----+----------+--------+
| 1 | 1 | 4.5 |
| 5 | 1 | 3.2 |
| 3 | 2 | 3.7 |
| 4 | 2 | 3.5 |
| 6 | 2 | 3.5 |
+----+----------+--------+
2 và LIMIT
, trình tối ưu hóa cố gắng chọn một chỉ mục được đặt hàng theo mặc định khi có vẻ như sẽ tăng tốc độ thực thi truy vấn. Trước MySQL 8.0.21, không có cách nào để ghi đè hành vi này, ngay cả trong trường hợp sử dụng một số tối ưu hóa khác có thể nhanh hơn. Bắt đầu với MySQL 8.0.21, có thể tắt tối ưu hóa này bằng cách đặt cờ mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
2 của biến hệ thống mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
1 thành mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
3. Ví dụ: Đầu tiên chúng tôi tạo và điền vào bảng
4 như được hiển thị ở đây:: First we create and populate a table mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
4 as shown here: # Create and populate a table t:
mysql> CREATE TABLE t [
-> id1 BIGINT NOT NULL,
-> id2 BIGINT NOT NULL,
-> c1 VARCHAR[50] NOT NULL,
-> c2 VARCHAR[50] NOT NULL,
-> PRIMARY KEY [id1],
-> INDEX i [id2, c1]
-> ];
# [Insert some rows into table t - not shown]
Xác minh rằng cờ
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
2 được bật:mysql> SELECT @@optimizer_switch LIKE '%prefer_ordering_index=on%';
+------------------------------------------------------+
| @@optimizer_switch LIKE '%prefer_ordering_index=on%' |
+------------------------------------------------------+
| 1 |
+------------------------------------------------------+
Vì truy vấn sau đây có mệnh đề LIMIT
, chúng tôi hy vọng nó sẽ sử dụng một chỉ mục được đặt hàng, nếu có thể.Trong trường hợp này, như chúng ta có thể thấy từ đầu ra
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
7, nó sử dụng khóa chính của bảng.mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
Bây giờ chúng tôi vô hiệu hóa cờ
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
2 và chạy lại cùng một truy vấn;Lần này, nó sử dụng chỉ mục mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: index
possible_keys: i
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
filtered: 70.00
Extra: Using where
9 [bao gồm cột mysql> SET optimizer_switch = "prefer_ordering_index=off";
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: range
possible_keys: i
key: i
key_len: 8
ref: NULL
rows: 14
filtered: 100.00
Extra: Using index condition; Using filesort
0 được sử dụng trong mệnh đề mysql> SET optimizer_switch = "prefer_ordering_index=off";
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: range
possible_keys: i
key: i
key_len: 8
ref: NULL
rows: 14
filtered: 100.00
Extra: Using index condition; Using filesort
1] và Filesort:mysql> SET optimizer_switch = "prefer_ordering_index=off";
mysql> EXPLAIN SELECT c2 FROM t
-> WHERE id2 > 3
-> ORDER BY id1 ASC LIMIT 2\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t
partitions: NULL
type: range
possible_keys: i
key: i
key_len: 8
ref: NULL
rows: 14
filtered: 100.00
Extra: Using index condition; Using filesort
Xem thêm Phần & NBSP; 8.9.2, Tối ưu hóa chuyển đổi có thể chuyển đổi.