Giải thích mở rộng trong MySQL là gì?

Câu lệnh EXPLAIN có thể được sử dụng như một từ đồng nghĩa với DESCRIBE hoặc như một cách để lấy thông tin về cách MariaDB thực thi một câu lệnh

EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
  {SELECT select_options | UPDATE update_options | DELETE delete_options}
0,
EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
  {SELECT select_options | UPDATE update_options | DELETE delete_options}
1 hoặc ________0____2

  • EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    3 đồng nghĩa với
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    4 hoặc
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    5
  • Khi bạn đặt trước câu lệnh
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    0,
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    1 hoặc
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    2 với từ khóa EXPLAIN, MariaDB sẽ hiển thị thông tin từ trình tối ưu hóa về kế hoạch thực hiện truy vấn. Nghĩa là, MariaDB giải thích cách nó sẽ xử lý
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    0,
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    1 hoặc
    EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
      {SELECT select_options | UPDATE update_options | DELETE delete_options}
    
    2, bao gồm thông tin về cách các bảng được nối và theo thứ tự.
    DESCRIBE city;
    +------------+----------+------+-----+---------+----------------+
    | Field      | Type     | Null | Key | Default | Extra          |
    +------------+----------+------+-----+---------+----------------+
    | Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
    | Name       | char(35) | YES  |     | NULL    |                |
    | Country    | char(3)  | NO   | UNI |         |                |
    | District   | char(20) | YES  | MUL |         |                |
    | Population | int(11)  | YES  |     | NULL    |                |
    +------------+----------+------+-----+---------+----------------+
    
    3 có thể được sử dụng để cung cấp thêm thông tin
  • DESCRIBE city;
    +------------+----------+------+-----+---------+----------------+
    | Field      | Type     | Null | Key | Default | Extra          |
    +------------+----------+------+-----+---------+----------------+
    | Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
    | Name       | char(35) | YES  |     | NULL    |                |
    | Country    | char(3)  | NO   | UNI |         |                |
    | District   | char(20) | YES  | MUL |         |                |
    | Population | int(11)  | YES  |     | NULL    |                |
    +------------+----------+------+-----+---------+----------------+
    
    4 chỉ hữu ích khi kiểm tra các truy vấn liên quan đến các bảng được phân vùng
    Để biết chi tiết, xem Cắt tỉa và lựa chọn phân vùng
  • Câu lệnh ANALYZE thực hiện truy vấn cũng như tạo đầu ra EXPLAIN và cung cấp số liệu thống kê thực tế cũng như ước tính
  • Đầu ra EXPLAIN có thể được in trong nhật ký truy vấn chậm. Xem GIẢI THÍCH trong Nhật ký truy vấn chậm để biết chi tiết

SHOW EXPLAIN hiển thị đầu ra của câu lệnh đang chạy. Trong một số trường hợp, đầu ra của nó có thể gần với thực tế hơn EXPLAIN

Câu lệnh ANALYZE chạy một câu lệnh và trả về thông tin về kế hoạch thực hiện của nó. Nó cũng hiển thị các cột bổ sung để kiểm tra mức độ ước tính của trình tối ưu hóa về việc lọc và tìm thấy các hàng gần với thực tế đến mức nào

Có một Trình phân tích EXPLAIN trực tuyến mà bạn có thể sử dụng để chia sẻ đầu ra _______ 57 _______ và _______ 12 _______3 với những người khác

EXPLAIN có thể khóa siêu dữ liệu giống như cách mà

EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
  {SELECT select_options | UPDATE update_options | DELETE delete_options}
0 thực hiện, vì nó cần biết siêu dữ liệu bảng và đôi khi cả dữ liệu

Các cột trong GIẢI THÍCH. LỰA CHỌN

Dưới đây là mô tả về các giá trị cho một số cột phức tạp hơn trong

CREATE TABLE IF NOT EXISTS `employees_example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(30) NOT NULL,
  `last_name` varchar(40) NOT NULL,
  `position` varchar(25) NOT NULL,
  `home_address` varchar(50) NOT NULL,
  `home_phone` varchar(12) NOT NULL,
  `employee_code` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `employee_code` (`employee_code`),
  KEY `first_name` (`first_name`,`last_name`)
) ENGINE=Aria;

INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
  VALUES
  ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
  ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
  ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
  ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
  ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
  ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');

SHOW INDEXES FROM employees_example;
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1

Cột "Select_type"

Cột

CREATE TABLE IF NOT EXISTS `employees_example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(30) NOT NULL,
  `last_name` varchar(40) NOT NULL,
  `position` varchar(25) NOT NULL,
  `home_address` varchar(50) NOT NULL,
  `home_phone` varchar(12) NOT NULL,
  `employee_code` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `employee_code` (`employee_code`),
  KEY `first_name` (`first_name`,`last_name`)
) ENGINE=Aria;

INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
  VALUES
  ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
  ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
  ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
  ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
  ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
  ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');

SHOW INDEXES FROM employees_example;
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 có thể có các giá trị sau

Cột "Loại"

Cột này chứa thông tin về cách truy cập bảng

Cột "Thêm"

Cột này bao gồm một hoặc nhiều giá trị sau, được phân tách bằng ';'

Lưu ý rằng một số giá trị này được phát hiện sau giai đoạn tối ưu hóa

Giai đoạn tối ưu hóa có thể thực hiện các thay đổi sau đối với mệnh đề

CREATE TABLE IF NOT EXISTS `employees_example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(30) NOT NULL,
  `last_name` varchar(40) NOT NULL,
  `position` varchar(25) NOT NULL,
  `home_address` varchar(50) NOT NULL,
  `home_phone` varchar(12) NOT NULL,
  `employee_code` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `employee_code` (`employee_code`),
  KEY `first_name` (`first_name`,`last_name`)
) ENGINE=Aria;

INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
  VALUES
  ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
  ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
  ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
  ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
  ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
  ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');

SHOW INDEXES FROM employees_example;
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3

  • Thêm các biểu thức từ mệnh đề
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    4 và
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    5 vào mệnh đề
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    3
  • lan truyền liên tục. Nếu có
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    7, hãy thay thế tất cả các phiên bản cột bằng hằng số này
  • Thay thế tất cả các cột từ bảng '
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    8' bằng các giá trị của chúng
  • Xóa các cột khóa đã sử dụng khỏi
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    3 (vì điều này sẽ được kiểm tra như một phần của tra cứu khóa)
  • Loại bỏ các biểu thức phụ không thể. Ví dụ:
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    0 trở thành
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    1
  • Thay thế các cột bằng các cột khác có giá trị giống hệt nhau. Thí dụ.
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    3
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    3 và
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    4 có thể được coi là
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    5
  • Thêm các điều kiện bổ sung để sớm phát hiện các điều kiện hàng không khả thi. Điều này chủ yếu xảy ra với
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    6, trong một số trường hợp, chúng tôi thêm tính năng phát hiện các giá trị
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    7 trong
    CREATE TABLE IF NOT EXISTS `employees_example` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `first_name` varchar(30) NOT NULL,
      `last_name` varchar(40) NOT NULL,
      `position` varchar(25) NOT NULL,
      `home_address` varchar(50) NOT NULL,
      `home_phone` varchar(12) NOT NULL,
      `employee_code` varchar(25) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `employee_code` (`employee_code`),
      KEY `first_name` (`first_name`,`last_name`)
    ) ENGINE=Aria;
    
    INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
      VALUES
      ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
      ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
      ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
      ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
      ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
      ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');
    
    SHOW INDEXES FROM employees_example;
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    | employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    | employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
    +-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
    
    3 (Một phần của tối ưu hóa '
    EXPLAIN SELECT * FROM employees_example WHERE id=1;
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    | id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    |    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
    +------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
    
    9'). Điều này có thể gây ra '
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    0' không mong muốn trong cột Phụ
  • Đối với mỗi cấp độ bảng, chúng tôi xóa các biểu thức đã được kiểm tra khi chúng tôi đọc hàng trước đó. Thí dụ. Khi nối các bảng
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    1 với
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    2 bằng cách sử dụng
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    3 sau đây, chúng tôi không phải kiểm tra
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    4 khi kiểm tra các hàng trong
    EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    | id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    |    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
    +------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
    
    2 vì chúng tôi đã biết rằng biểu thức này là đúng

GIẢI THÍCH MỞ RỘNG

Từ khóa

EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
6 thêm một cột khác, được lọc, vào đầu ra. Đây là ước tính tỷ lệ phần trăm của các hàng trong bảng sẽ được lọc theo điều kiện

Một

DESCRIBE city;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | YES  |     | NULL    |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+
3 sẽ luôn đưa ra một cảnh báo, vì nó thêm thông tin Thông báo bổ sung vào câu lệnh
EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
8 tiếp theo. Điều này bao gồm truy vấn
EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
  {SELECT select_options | UPDATE update_options | DELETE delete_options}
0 trông như thế nào sau khi áp dụng các quy tắc viết lại và tối ưu hóa cũng như cách trình tối ưu hóa xác định các cột và bảng

ví dụ

Là từ đồng nghĩa với DESCRIBE hoặc

SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
| id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows    | Extra       |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
|    1 | SIMPLE      | tbl   | index | NULL          | a    | 5       | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
1 row in set, 1 warning (0.00 sec)
1

DESCRIBE city;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | YES  |     | NULL    |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | YES  |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

Một tập hợp các ví dụ đơn giản để xem cách EXPLAIN có thể xác định cách sử dụng chỉ mục kém

CREATE TABLE IF NOT EXISTS `employees_example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(30) NOT NULL,
  `last_name` varchar(40) NOT NULL,
  `position` varchar(25) NOT NULL,
  `home_address` varchar(50) NOT NULL,
  `home_phone` varchar(12) NOT NULL,
  `employee_code` varchar(25) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `employee_code` (`employee_code`),
  KEY `first_name` (`first_name`,`last_name`)
) ENGINE=Aria;

INSERT INTO `employees_example` (`first_name`, `last_name`, `position`, `home_address`, `home_phone`, `employee_code`)
  VALUES
  ('Mustapha', 'Mond', 'Chief Executive Officer', '692 Promiscuous Plaza', '326-555-3492', 'MM1'),
  ('Henry', 'Foster', 'Store Manager', '314 Savage Circle', '326-555-3847', 'HF1'),
  ('Bernard', 'Marx', 'Cashier', '1240 Ambient Avenue', '326-555-8456', 'BM1'),
  ('Lenina', 'Crowne', 'Cashier', '281 Bumblepuppy Boulevard', '328-555-2349', 'LC1'),
  ('Fanny', 'Crowne', 'Restocker', '1023 Bokanovsky Lane', '326-555-6329', 'FC1'),
  ('Helmholtz', 'Watson', 'Janitor', '944 Soma Court', '329-555-2478', 'HW1');

SHOW INDEXES FROM employees_example;
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name      | Seq_in_index | Column_name   | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| employees_example |          0 | PRIMARY       |            1 | id            | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          0 | employee_code |            1 | employee_code | A         |           7 |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            1 | first_name    | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
| employees_example |          1 | first_name    |            2 | last_name     | A         |        NULL |     NULL | NULL   |      | BTREE      |         |               |
+-------------------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

EXPLAIN [EXTENDED | PARTITIONS | FORMAT=JSON] 
  {SELECT select_options | UPDATE update_options | DELETE delete_options}
0 trên khóa chính

EXPLAIN SELECT * FROM employees_example WHERE id=1;
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
| id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
|    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+

Loại là const, có nghĩa là chỉ có thể trả về một kết quả có thể. Bây giờ, trả lại cùng một bản ghi nhưng tìm kiếm theo số điện thoại của họ

EXPLAIN SELECT * FROM employees_example WHERE home_phone='326-555-3492';
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table             | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | employees_example | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
+------+-------------+-------------------+------+---------------+------+---------+------+------+-------------+

Ở đây, loại là Tất cả, có nghĩa là không thể sử dụng chỉ mục nào. Nhìn vào số lượng hàng, phải thực hiện quét toàn bộ bảng (tất cả sáu hàng) để truy xuất bản ghi. Nếu bắt buộc phải tìm kiếm theo số điện thoại, một chỉ mục sẽ phải được tạo

HIỂN THỊ GIẢI THÍCH ví dụ

SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
| id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows    | Extra       |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
|    1 | SIMPLE      | tbl   | index | NULL          | a    | 5       | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
1 row in set, 1 warning (0.00 sec)

Ví dụ về Tối ưu hóa SHOW EXPLAIN FOR 1; +------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+ | 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL | 1000107 | Using index | +------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+ 1 row in set, 1 warning (0.00 sec) 4

SELECT * FROM table_name
  WHERE key_column=expr OR key_column IS NULL;

SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
| id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows    | Extra       |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
|    1 | SIMPLE      | tbl   | index | NULL          | a    | 5       | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
1 row in set, 1 warning (0.00 sec)
4 là điều thường xảy ra khi bạn sử dụng các truy vấn con với
SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
| id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows    | Extra       |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
|    1 | SIMPLE      | tbl   | index | NULL          | a    | 5       | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
1 row in set, 1 warning (0.00 sec)
6 vì khi đó người ta phải kiểm tra thêm các giá trị
EXPLAIN SELECT * FROM employees_example WHERE id=1;
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
| id   | select_type | table             | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
|    1 | SIMPLE      | employees_example | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
+------+-------------+-------------------+-------+---------------+---------+---------+-------+------+-------+
7 nếu giá trị đầu tiên không có hàng phù hợp

Việc sử dụng giải thích trong MySQL là gì?

Câu lệnh EXPLAIN cung cấp thông tin về cách MySQL thực thi các câu lệnh . EXPLAIN hoạt động với các câu lệnh SELECT , DELETE , INSERT , REPLACE và UPDATE. Khi EXPLAIN được sử dụng với một câu lệnh có thể giải thích được, MySQL sẽ hiển thị thông tin từ trình tối ưu hóa về kế hoạch thực hiện câu lệnh.

Phân tích giải thích cho thấy điều gì?

EXPLAIN ANALYZE là một công cụ lập hồ sơ cho các truy vấn của bạn. Công cụ này sẽ cho bạn thấy MySQL dành thời gian cho truy vấn của bạn ở đâu và tại sao . Nó sẽ lập kế hoạch cho truy vấn, thiết bị và thực hiện nó trong khi đếm các hàng và đo thời gian dành cho các điểm khác nhau trong kế hoạch thực hiện.

Làm cách nào để tối ưu hóa truy vấn MySQL?

Tối ưu hóa truy vấn với Nguyên tắc tối ưu hóa truy vấn MySQL .
Tránh sử dụng các chức năng trong vị ngữ. .
Tránh sử dụng ký tự đại diện (%) ở đầu vị ngữ. .
Tránh các cột không cần thiết trong mệnh đề SELECT. .
Sử dụng nối bên trong, thay vì nối ngoài nếu có thể. .
Chỉ sử dụng DISTINCT và UNION nếu cần thiết

Cột bổ sung trong MySQL là gì?

Cột Extra của đầu ra EXPLAIN chứa thông tin bổ sung về cách MySQL giải quyết truy vấn . Danh sách sau đây giải thích các giá trị có thể xuất hiện trong cột này. Mỗi mục cũng cho biết đối với đầu ra có định dạng JSON thuộc tính nào hiển thị Giá trị bổ sung. Đối với một số trong số này, có một tài sản cụ thể.