Khi bạn đưa ra một truy vấn, Trình tối ưu hóa truy vấn MySQL sẽ cố gắng đưa ra một kế hoạch tối ưu để thực hiện truy vấn. Bạn có thể xem thông tin về kế hoạch bằng cách đặt trước truy vấn bằng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5. ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5 là một trong những công cụ mạnh mẽ nhất mà bạn có thể sử dụng để hiểu và tối ưu hóa các truy vấn rắc rối của MySQL, nhưng có một thực tế đáng buồn là nhiều nhà phát triển hiếm khi sử dụng nó. Trong bài viết này, bạn sẽ tìm hiểu đầu ra của ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5 có thể là gì và cách sử dụng nó để tối ưu hóa lược đồ và truy vấn của bạn Show Hiểu đầu ra của EXPLAINSử dụng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5 cũng đơn giản như việc chờ đợi nó trước các truy vấn của ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)9. Hãy phân tích đầu ra của một truy vấn đơn giản để làm quen với các cột được trả về bởi lệnh
********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec) Có vẻ như không phải vậy, nhưng có rất nhiều thông tin được gói gọn trong 10 cột đó. Các cột được truy vấn trả về là
Bạn cũng có thể thêm từ khóa 0 sau ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5 trong truy vấn của mình và MySQL sẽ hiển thị cho bạn thông tin bổ sung về cách nó thực hiện truy vấn. Để xem thông tin, hãy làm theo truy vấn ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5 của bạn với 3. Điều này chủ yếu hữu ích để xem truy vấn được thực thi sau khi bất kỳ chuyển đổi nào được thực hiện bởi Trình tối ưu hóa truy vấn
********************** 1. row ********************** id: 1 select_type: SIMPLE table: Country type: const possible_keys: PRIMARY key: PRIMARY key_len: 3 ref: const rows: 1 filtered: 100.00 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: City type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4079 filtered: 100.00 Extra: Using where 2 rows in set, 1 warning (0.00 sec)
********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec) Khắc phục sự cố Hiệu suất với EXPLAINBây giờ, hãy xem cách chúng ta có thể tối ưu hóa một truy vấn hoạt động kém bằng cách phân tích đầu ra của ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5. Khi xử lý một ứng dụng trong thế giới thực, chắc chắn sẽ có một số bảng có nhiều mối quan hệ giữa chúng, nhưng đôi khi thật khó để dự đoán cách viết truy vấn tối ưu nhất Ở đây, tôi đã tạo một cơ sở dữ liệu mẫu cho một ứng dụng thương mại điện tử không có bất kỳ chỉ mục hoặc khóa chính nào và sẽ chứng minh tác động của một thiết kế tồi tệ như vậy bằng cách viết một truy vấn khá tệ. Bạn có thể tải xuống mẫu lược đồ từ GitHub
********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec) Nếu bạn nhìn vào kết quả trên, bạn có thể thấy tất cả các dấu hiệu của một truy vấn không hợp lệ. Nhưng ngay cả khi tôi đã viết một truy vấn tốt hơn, kết quả vẫn như vậy vì không có chỉ mục. Loại liên kết được hiển thị là “TẤT CẢ” (tệ nhất), có nghĩa là MySQL không thể xác định bất kỳ khóa nào có thể được sử dụng trong liên kết và do đó, các cột ********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec)0 và ********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec)1 là null. Quan trọng nhất, cột ********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec)7 hiển thị MySQL quét tất cả các bản ghi của mỗi bảng để truy vấn. Điều đó có nghĩa là để thực hiện truy vấn, nó sẽ quét 7 × 110 × 122 × 326 × 2996 = 91.750.822.240 bản ghi để tìm bốn kết quả phù hợp. Điều đó thực sự khủng khiếp và nó sẽ chỉ tăng theo cấp số nhân khi cơ sở dữ liệu phát triển Bây giờ, hãy thêm một số chỉ mục rõ ràng, chẳng hạn như khóa chính cho mỗi bảng và thực hiện lại truy vấn. Theo nguyên tắc chung, bạn có thể xem các cột được sử dụng trong mệnh đề 8 của truy vấn như các ứng cử viên tốt cho các khóa vì MySQL sẽ luôn quét các cột đó để tìm các bản ghi phù hợp
Hãy chạy lại cùng một truy vấn sau khi thêm các chỉ mục và kết quả sẽ như thế này ********************** 1. row ********************** id: 1 select_type: SIMPLE table: o type: const possible_keys: PRIMARY,customerNumber key: PRIMARY key_len: 4 ref: const rows: 1 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: c type: const possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 1 Extra: ********************** 3. row ********************** id: 1 select_type: SIMPLE table: d type: ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: const rows: 4 Extra: ********************** 4. row ********************** id: 1 select_type: SIMPLE table: p type: eq_ref possible_keys: PRIMARY,productLine key: PRIMARY key_len: 17 ref: classicmodels.d.productCode rows: 1 Extra: ********************** 5. row ********************** id: 1 select_type: SIMPLE table: l type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 52 ref: classicmodels.p.productLine rows: 1 Extra: 5 rows in set (0.00 sec) Sau khi thêm chỉ mục, số lượng bản ghi được quét đã giảm xuống còn 1 × 1 × 4 × 1 × 1 = 4. Điều đó có nghĩa là đối với mỗi bản ghi có 9 10101 trong bảng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)0, MySQL có thể trực tiếp tìm thấy bản ghi phù hợp trong tất cả các bảng khác bằng cách sử dụng các chỉ mục và không cần phải quét toàn bộ bảng Trong đầu ra của hàng đầu tiên, bạn có thể thấy kiểu nối được sử dụng là “const”, đây là kiểu nối nhanh nhất cho một bảng có nhiều bản ghi. MySQL đã có thể sử dụng khóa ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)1 làm chỉ mục. Cột tham chiếu hiển thị “const”, không có gì khác ngoài giá trị 10101 được sử dụng trong mệnh đề ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)2 của truy vấn Hãy xem thêm một truy vấn ví dụ. Ở đây về cơ bản, chúng ta sẽ lấy hợp của hai bảng, ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)3 và ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)4, mỗi bảng được nối với ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)5. Bảng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)4 bao gồm các biến thể sản phẩm khác nhau với ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)7 làm khóa tham chiếu và giá của chúng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)0 ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)1 Bạn có thể thấy một số vấn đề trong truy vấn này. Nó quét tất cả các bản ghi trong bảng ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)3 và ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)4. Vì không có chỉ mục trên các bảng này cho các cột 0 và 1, nên các cột ********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec)0 và ********************** 1. row ********************** Level: Note Code: 1003 Message: select `World`.`City`.`Name` AS `Name` from `World`.`City` join `World`.`Country` where ((`World`.`City`.`CountryCode` = 'IND')) 1 row in set (0.00 sec)1 của kết quả hiển thị null. Trạng thái của ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)3 và 5 được kiểm tra sau 6, vì vậy việc di chuyển chúng vào bên trong 6 sẽ làm giảm số lượng bản ghi. Hãy thêm một số chỉ mục bổ sung và viết lại truy vấn********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)2 ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)3 ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)4 Như bạn có thể thấy trong kết quả, giờ đây số lượng hàng gần đúng được quét đã giảm đáng kể từ 2.625.810 (219 × 110 × 109) xuống còn 276 (12 × 23), đây là mức tăng hiệu suất rất lớn. Nếu bạn thử cùng một truy vấn, không có sự sắp xếp lại trước đó, chỉ sau khi thêm các chỉ mục, bạn sẽ không thấy giảm nhiều. MySQL không thể sử dụng các chỉ mục vì nó có mệnh đề ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)2 trong kết quả dẫn xuất. Sau khi di chuyển các điều kiện đó vào bên trong 6, nó có thể sử dụng các chỉ mục. Điều này có nghĩa là chỉ thêm một chỉ mục không phải lúc nào cũng đủ; Tóm lượcTrong bài viết này, tôi đã thảo luận về từ khóa MySQL ********************** 1. row ********************** id: 1 select_type: SIMPLE table: categories type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4 Extra: 1 row in set (0.00 sec)5, ý nghĩa của đầu ra của nó và cách bạn có thể sử dụng đầu ra của nó để xây dựng các truy vấn tốt hơn. Trong thế giới thực, nó có thể hữu ích hơn các kịch bản được trình bày ở đây. Thông thường, bạn sẽ nối một số bảng lại với nhau và sử dụng các mệnh đề ********************** 1. row ********************** id: 1 select_type: SIMPLE table: l type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 7 Extra: ********************** 2. row ********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 110 Extra: Using where; Using join buffer ********************** 3. row ********************** id: 1 select_type: SIMPLE table: c type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 122 Extra: Using join buffer ********************** 4. row ********************** id: 1 select_type: SIMPLE table: o type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 326 Extra: Using where; Using join buffer ********************** 5. row ********************** id: 1 select_type: SIMPLE table: d type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 2996 Extra: Using where; Using join buffer 5 rows in set (0.00 sec)2 phức tạp. Các chỉ mục được thêm đơn giản trên một vài cột có thể không phải lúc nào cũng hữu ích và sau đó là lúc để xem xét kỹ hơn các truy vấn của bạn Hình ảnh qua Efman / Shutterstock Chia sẻ bài viết nàyxấu hổ C Shameer là một lập trình viên đam mê và đam mê mã nguồn mở đến từ Kerala, Ấn Độ. Anh ấy có kinh nghiệm phát triển web bằng Scala, PHP, Ruby, MySQL và JavaScript. Khi không làm việc, Shameer dành thời gian viết mã cho các dự án cá nhân, học hỏi, xem diễn viên trên màn hình, viết blog, v.v. Các lĩnh vực quan tâm cụ thể của ông bao gồm điện toán đám mây, quản trị hệ thống và cơ sở dữ liệu MySQL là gì và tại sao nó được sử dụng?MySQL là hệ thống quản lý cơ sở dữ liệu . Nó có thể là bất cứ thứ gì từ danh sách mua sắm đơn giản đến thư viện ảnh hoặc lượng thông tin khổng lồ trong mạng công ty. Để thêm, truy cập và xử lý dữ liệu được lưu trữ trong cơ sở dữ liệu máy tính, bạn cần một hệ thống quản lý cơ sở dữ liệu như MySQL Server.
Sự khác biệt giữa SQL và MySQL là gì?SQL là ngôn ngữ lập trình truy vấn quản lý RDBMS. MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ sử dụng SQL . SQL chủ yếu được sử dụng để truy vấn và vận hành các hệ thống cơ sở dữ liệu. MySQL cho phép bạn xử lý, lưu trữ, sửa đổi và xóa dữ liệu và lưu trữ dữ liệu một cách có tổ chức.
MySQL giải thích chi tiết với ví dụ là gì?MySQL là hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) do Oracle phát triển dựa trên ngôn ngữ truy vấn có cấu trúc (SQL) . Cơ sở dữ liệu là một tập hợp dữ liệu có cấu trúc. Nó có thể là bất cứ thứ gì, từ danh sách mua sắm đơn giản đến thư viện ảnh hoặc nơi chứa lượng thông tin khổng lồ trong mạng công ty.
Giải thích nghĩa là gì trong MySQL?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. EXPLAIN trả về một hàng thông tin cho mỗi bảng được sử dụng trong câu lệnh SELECT. |