Cột được lọc trong MySQL giải thích

Nếu bạn đã tìm thấy chính mình trong thế giới MySQL (ít nhất là trong một thời gian ngắn), rất có thể bạn đã nghe nói về việc sử dụng EXPLAIN. Trong thế giới MySQL, từ khóa này ở khắp mọi nơi

một năm trước   •   5 phút đọc

Cột được lọc trong MySQL giải thích
Bởi Lukas Vileikis

Cột được lọc trong MySQL giải thích

Mục lục

Bạn đã bao giờ tìm kiếm lời khuyên về hiệu suất truy vấn chưa? . Bạn muốn biết những truy vấn của bạn làm gì ở cấp độ sâu hơn? . Bạn muốn biết truy vấn của mình sử dụng chỉ mục nào? . Sau khi đọc bài đăng trên blog này, bạn sẽ hiểu tầm quan trọng của từ khóa này (nếu bạn chưa hiểu)

Cách sử dụng GIẢI THÍCH

Để sử dụng EXPLAIN ở dạng đơn giản nhất, hãy thêm từ khóa vào đầu truy vấn của bạn như vậy

EXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';

Một truy vấn như trên sẽ tạo ra kết quả tương tự như sau

********************* 1. row **********************
id: 1
select_type: SIMPLE
table: demo_table
partitions: NULL
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
filtered: 100.00
Extra: NULL

Như bạn có thể thấy, EXPLAIN cung cấp cho bạn khá nhiều dữ liệu, bao gồm ID của truy vấn và loại truy vấn SELECT mà bạn vừa chạy ( SIMPLE đề cập đến thực tế là truy vấn không sử dụng các hoạt động JOIN). Bạn có thể xem bạn vừa chạy truy vấn trên bảng nào, phân vùng nào đã được sử dụng, loại truy vấn, các chỉ mục có thể đã được sử dụng và đã được sử dụng, độ dài của các chỉ mục, số lượng hàng và liệu có bất kỳ tỷ lệ phần trăm nào của truy vấn hay không.

Đầu ra ở trên được lấy từ lệnh EXPLAIN0—bạn có thể nối thêm EXPLAIN1 nếu bạn muốn MySQL cung cấp cho bạn thêm một số thông tin. Thông tin mở rộng được cung cấp cho các câu lệnh SELECT, EXPLAIN3, EXPLAIN4, EXPLAIN5 và EXPLAIN6 nếu bạn đang sử dụng MySQL 8. 0. 12 trở lên và chỉ dành cho các truy vấn SELECT trong các phiên bản cũ hơn của MySQL hoặc MariaDB. Lệnh EXPLAIN1 có thể được sử dụng để có thêm thông tin về cách MySQL thực hiện truy vấn. nó có thể được sử dụng để xác định, ví dụ, chức năng nào được MySQL sử dụng để so sánh các cột với chỉ mục để chọn các hàng từ bảng, v.v.

GIẢI THÍCH là gì?

Trong thế giới MySQL, EXPLAIN là một từ khóa được sử dụng để lấy thông tin về việc thực hiện truy vấn. Nói cách khác, từ khóa này cung cấp thông tin về cách cơ sở dữ liệu thực hiện một truy vấn nhất định – thêm ____1_______ trước truy vấn mà bạn chạy và bạn sẽ có thể quan sát

  • ID của truy vấn
  • Loại SELECT của bạn (nếu bạn đang chạy một chiếc SELECT)
  • Bảng mà truy vấn của bạn đang chạy trên đó
  • Các phân vùng được truy cập bởi truy vấn của bạn
  • Các loại JOIN được sử dụng (nếu có)
  • Các chỉ mục mà MySQL có thể chọn
  • Chỉ mục MySQL thực sự được sử dụng
  • Độ dài của chỉ mục được chọn bởi MySQL
  • Số hàng được truy cập bởi truy vấn
  • Các cột so với chỉ mục
  • Phần trăm số hàng được lọc theo một điều kiện cụ thể
  • Mọi thông tin bổ sung liên quan đến truy vấn

Không còn nghi ngờ gì nữa, EXPLAIN cung cấp rất nhiều thông tin. Tuy nhiên, khi bạn nắm được các tính năng của nó và hiểu cách sử dụng nó tốt nhất để đạt được các mục tiêu về hiệu suất của mình, thì việc sử dụng nó sẽ trở nên dễ dàng hơn

KHI NÀO SỬ DỤNG GIẢI THÍCH

Đến bây giờ, bạn nên biết về sức mạnh của các truy vấn EXPLAIN trong MySQL. Tuy nhiên, chúng tôi vẫn chưa đề cập đến thời điểm bạn nên sử dụng các truy vấn như vậy ngay từ đầu. Trong không gian MySQL, mọi thứ khá đơn giản. Các truy vấn EXPLAIN có thể (và nên) được sử dụng khi bạn không chắc liệu truy vấn của mình có thực hiện đúng chức năng của nó hay không. Vì vậy, ví dụ, nếu bạn nghĩ rằng bạn đã lập chỉ mục và phân vùng các bảng của mình đúng cách, nhưng các truy vấn của bạn vẫn từ chối chạy nhanh như bạn muốn, thì có lẽ đã đến lúc bạn nên yêu cầu họ tự EXPLAIN. Hiểu rồi?

Sau khi bạn tự nói với các truy vấn của mình với EXPLAIN, đầu ra mà bạn nên theo dõi sẽ phụ thuộc vào những gì bạn muốn tối ưu hóa, chẳng hạn như

Chỉ mục toàn văn + Tham gia

Nếu bạn muốn đảm bảo rằng các truy vấn của mình đang tham gia vào hoạt động JOIN khi sử dụng chỉ mục EXPLAIN0, hãy để ý đến cột EXPLAIN1 - giá trị của cột này phải là EXPLAIN2

phân vùng

Nếu bạn đã thêm phân vùng vào bảng của mình và muốn quan sát truy vấn nào sử dụng phân vùng nào, hãy quan sát cột EXPLAIN3. Nếu phiên bản MySQL của bạn đang sử dụng phân vùng, thì trong hầu hết các trường hợp, MySQL sẽ tự xử lý tất cả các truy vấn và bạn không phải thực hiện thêm bất kỳ hành động nào, nhưng nếu bạn muốn truy vấn của mình sử dụng các phân vùng cụ thể, bạn có thể sử dụng các truy vấn như EXPLAIN4. một truy vấn như vậy sẽ trả về tất cả các hàng từ các phân vùng EXPLAIN5 và EXPLAIN6 trong khi loại trừ các hàng từ tất cả các phân vùng khác

Phím, phím có thể và độ dài phím

Khi làm việc với các chỉ mục trong MySQL, hãy để ý đến các cột EXPLAIN7, EXPLAIN8 và EXPLAIN9. Cột EXPLAIN7 sẽ cho chúng tôi biết MySQL có thể sử dụng chỉ mục nào, cột EXPLAIN8 sẽ cho chúng tôi biết chỉ mục nào đã được chọn và cột EXPLAIN9 sẽ cho chúng tôi biết độ dài của khóa (chỉ mục) đã chọn. Tính năng này có thể hữu ích cho việc thiết kế chỉ mục của chúng tôi, quyết định sử dụng chỉ mục nào cho khối lượng công việc cụ thể, xử lý các vấn đề liên quan đến chỉ mục (ví dụ: chọn độ dài thích hợp cho chỉ mục bao phủ) và các trục trặc khác liên quan đến chỉ mục

Kiểu dữ liệu cột

Khi thiết kế các truy vấn, hãy chú ý đến cột EXPLAIN3. Cột EXPLAIN3 có thể được gọi là một trong những trường tốt nhất trong đầu ra khi có liên quan đến thiết kế truy vấn của bạn – lý do chính là nó hiển thị cách MySQL hoặc MariaDB tham gia các bảng

Giá trị

Nghĩa

systemBảng trống hoặc có một hàngconstGiá trị của cột có thể được coi là hằng số (có một hàng phù hợp với truy vấn)eq_refChỉ mục được nhóm lại và đang được sử dụng bởi thao tác (hoặc chỉ mục là EXPLAIN5 hoặc EXPLAIN6 với tất cả . Có lẽ kết quả tồi tệ nhất nếu bạn đang tối ưu hóa hiệu suất truy vấn trong MySQL hoặc MariaDB

Các cột được so sánh với một chỉ mục

Cột giới thiệu cũng rất quan trọng, đặc biệt nếu bạn muốn cải thiện hiệu suất truy vấn của mình bằng cách sử dụng các chỉ mục – cột này hiển thị các cột được so sánh với chỉ mục để hoàn thành một yêu cầu nhất định. giá trị của const có nghĩa là một hằng số, trong khi giá trị của func có nghĩa là giá trị được sử dụng được lấy từ một hàm

Số hàng được truy cập

Khi thiết kế các chỉ mục bên trong các phiên bản cơ sở dữ liệu của bạn, hãy chú ý đến cột EXPLAIN9. Cột này hiển thị số lượng hàng mà MySQL đã truy cập để hoàn thành một yêu cầu nhất định, điều này có thể rất hữu ích khi thiết kế các chỉ mục. Truy vấn của bạn có thể truy cập càng ít hàng thì truy vấn của bạn càng nhanh

Hàng được lọc

Lọc cũng có thể là một cái gì đó đáng để theo dõi. Cột này cho biết tỷ lệ phần trăm gần đúng của các hàng trong bảng đang được lọc theo một điều kiện cụ thể

Cột bổ sung

Để mắt đến cột EXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';0 có thể không phải lúc nào cũng cần thiết, nhưng bạn nên nhớ rằng cột này có thể có nhiều giá trị, bao gồm

Ý nghĩa giá trịEXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';1MySQL sử dụng chỉ mục giảm dần để hoàn thành truy vấnEXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';2Bảng được truy vấn trốngEXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';3MySQL đang rà soát cơ sở dữ liệu để tìm bất kỳ giá trị riêng biệt nào có thể xuất hiện trong cộtEXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';4Truy vấn không có mệnh đề EXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';5_______5_______6MySQL có thể sử dụng một chỉ mục nhất định để tối ưu hóa hoạt động của EXPLAIN SELECT * FROM demo_table WHERE demo_column = 'Demo Value';7

EXPLAIN có thể được sử dụng trong một số tình huống khác nhau, nhưng như bây giờ bạn có thể biết, nó hữu ích nhất khi tối ưu hóa hiệu suất của truy vấn hoặc đánh giá kết quả tối ưu hóa truy vấn

Tóm lược

Câu lệnh EXPLAIN trong MySQL có thể được sử dụng để lấy thông tin về việc thực hiện truy vấn. Đó là thuận lợi khi thiết kế lược đồ hoặc chỉ mục và để đảm bảo rằng cơ sở dữ liệu của chúng tôi có thể sử dụng các tính năng do MySQL cung cấp ở mức độ lớn nhất có thể. Tuy nhiên, hãy nhớ rằng câu lệnh EXPLAIN không phải là người bạn duy nhất của bạn về vấn đề này - nếu bạn muốn tối ưu hóa hiệu suất của các phiên bản MySQL của mình, các ứng dụng khách SQL như Arctype cũng có thể hỗ trợ rất nhiều—hãy cung cấp cho nó các truy vấn của bạn và nó sẽ làm nên điều kỳ diệu

Cột được lọc trong giải thích MySQL là gì?

Cột đã lọc biểu thị tỷ lệ phần trăm ước tính của các hàng trong bảng sẽ được lọc theo điều kiện bảng . Nghĩa là, rows hiển thị số hàng ước tính được kiểm tra và rows ×filter/100 hiển thị số lượng hàng sẽ được nối với các bảng trước đó.

Bộ lọc có thể được sử dụng trên kết quả truy vấn không?

Truy vấn truy xuất hàng và cột từ bảng. Sau khi chạy truy vấn, bạn có thể giới hạn thêm số lượng mục được hiển thị trong biểu dữ liệu bằng cách áp dụng các bộ lọc. Bộ lọc là lựa chọn tốt khi bạn muốn tạm thời giới hạn kết quả truy vấn mà không cần vào Chế độ xem thiết kế để chỉnh sửa truy vấn của mình .

Câu lệnh nào không dùng để lọc dữ liệu trong MySQL?

Có mệnh đề không lọc bản ghi mysql.

Câu lệnh nào bạn sẽ không sử dụng để lọc dữ liệu?

CASE trong T-SQL là một biểu thức (không phải là "câu lệnh") - nó đánh giá một giá trị nguyên tử duy nhất - và như .