sách gpt4 ăn đã đi

Giải thích chi tiết về hoạt động chỉ mục MongoDB và kế hoạch thực hiện Giải thích()

In lại Tác giả: Tôi là chú chim nhỏ Thời gian cập nhật: 2023-08-11 22:31:48 32 4
mua khóa gpt4 giày nike

Nó chủ yếu nói về việc xem, tạo, xóa và mô tả kiểu của chỉ mục Mongodb, cũng như giải thích về kế hoạch thực hiện Giải thích. .

  。

Có thể sao chép nhưng vui lòng ghi rõ nguồn. .

SpringBoot tôi đã viết trước đó tích hợp thao tác truy vấn tổng hợp của MongoDB. Nếu quan tâm, bạn có thể nhấp vào để xem thử.

https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 。

Các hoạt động liên quan đến mảng.

https://www.cnblogs.com/zaoyu/p/mongodb_array_operator.html 。

  。

1. Thao tác chỉ mục

Lưu ý, nội dung sau đây sử dụng bộ sưu tập "dailyTrip" làm ví dụ. Nội dung trường như sau:

                          
                            {
    
                          
                          "_id": Mã đối tượng("63ec5a971ddbe429cbeeffe3"),  
                          
                            //
                          
                          
                             ID đối tượng
                          
                          
    "car_type" : "Lấy",  
                          
                            //
                          
                          
                             sợi dây
                          
                          
    "ngày" : ISODate("2016-04-01T00:00:00.000+0000"),  
                          
                            //
                          
                          
                            Ngày ISO
                          
                          
    "chuyến đi" : 0.0,  
                          
                            //
                          
                          
                             con số
                          
                          
    "hàng tháng" : "NA", 
                          
                            //
                          
                          
                             sợi dây
                          
                          
    "parent_type" : "Ứng dụng gọi xe", 
                          
                            //
                          
                          
                             sợi dây
                          
                          
    "monthly_is_estimated" : 
                          
                            ĐÚNG VẬY
                          
                          , 
                          
                            //
                          
                          
                             Boolean
                          
                          
    "địa lý" : {  
                          
                            //
                          
                          
                             sự vật 
                          
                          
        "$concat" : [  
                          
                            //
                          
                          
                             mảng 
                          
                          
            "$kiểu_cha_con"
                          
                            ,
            
                          
                          "$nhóm"
                          
                            
        ] } }
                          
                        

Thực hiện và thấy rằng có 51.700 mẩu dữ liệu.

1. Loại chỉ mục

  • Chỉ mục cột đơn: Chỉ mục được tạo trên một trường.

  • Chỉ mục tổng hợp: Chỉ mục được tạo bằng cách kết hợp nhiều trường lại với nhau. Khi sử dụng, hãy chú ý đến nguyên tắc tiền tố ngoài cùng bên trái để tránh lỗi chỉ mục (không hợp lệ).

  • Chỉ mục văn bản (chỉ mục toàn văn bản) và chỉ mục không gian (chỉ mục GEO) không được sử dụng phổ biến và sẽ không được thảo luận ở đây. Vui lòng kiểm tra trực tuyến để biết chi tiết.

  。

2. Xem

ngữ pháp:

                          db.Collection.getIndexs(); 
                        

Trả về mô tả nội dung:

                          [  
                          
                            //
                          
                          
                             Trả về một mảng chứa tất cả các chỉ mục
                          
                          
                                {
        
                          
                          "v" : 2.0,  
                          
                            //
                          
                          
                             Phiên bản chỉ mục, có thể bỏ qua
                          
                          
        "chìa khóa" : {  
                          
                            //
                          
                          
                             Chỉ mục được thêm vào trường nào và sắp xếp
                          
                          
            "_id" : 1.0  
                          
                            //
                          
                          
                             _id là một trường, 1.0 là thứ tự dương (thứ tự tăng dần), -1.0 là thứ tự đảo ngược (thứ tự đảo ngược)
                          
                          
                                    },
        
                          
                          "tên" : "_id_"  
                          
                            //
                          
                          
                             Tên chỉ mục, nếu không được chỉ định khi thêm, Mongo sẽ tự động tạo nó. 
                          
                          
                                } ]
                          
                        

Ví dụ:

Bạn có thể thấy rằng chỉ mục có tên _id_ được trả về. Hành động theo _id và sắp xếp theo thứ tự tăng dần.

3. Tạo

ngữ pháp:

                          
                            db.collection.createIndex(khóa, tùy chọn)


                          
                          
                            //
                          
                          
                             chỉ số kết hợp 
                          
                          
db.collection.createIndex( { : , : , ... } )  
                          
                            //
                          
                          
                             Trong đó  là tên trường  là cách sắp xếp
                          
                          
                            
Để ý:
                          
                          Trước phiên bản 3.0.0, phương thức tạo chỉ mục là db.collection.ensureIndex(). EnsureIndex() đã bị xóa sau phiên bản 5.0.
                        

Ví dụ:

                          
                            //
                          
                          
                             Tạo một chỉ mục trường duy nhất
                          
                          
db.dailyTrip.createIndex({"car_type":1
                          
                            });


                          
                          
                            //
                          
                          
                             Trả về kết quả 
                          
                          
                            {
    
                          
                          "numIndexesBefore" : 1.0,  
                          
                            //
                          
                          
                             Số lượng chỉ mục trước khi tạo chỉ mục mới
                          
                          
    "numIndexesAfter" : 2.0,  
                          
                            //
                          
                          
                             Số lượng chỉ mục sau khi tạo chỉ mục mới  
                          
                          
    "createdCollectionAutomatically": 
                          
                            SAI
                          
                          ,   
                          
                            //
                          
                          
                             Thông thường, nếu bộ sưu tập tồn tại, false sẽ được trả về đây. Nếu bộ sưu tập được chỉ định không tồn tại, MongoDB sẽ tự động tạo bộ sưu tập theo mặc định và tạo chỉ mục trên bộ sưu tập và trả về true trong trường hợp này.
                          
                          
    "Được" : 1.0  
                          
                            //
                          
                          
                             Tạo kết quả 1.0 là thành công. Trả về 0 có nghĩa là đã báo lỗi.
                          
                          
                            }


                          
                          
                            //
                          
                          
                             Nếu chỉ mục của trường đã tạo đã tồn tại, thông tin sau sẽ được trả về:
                          
                          
                            {
    
                          
                          "numIndexesBefore" : 2.0
                          
                            ,
    
                          
                          "numIndexesAfter" : 2.0
                          
                            ,
    
                          
                          "lưu ý": "tất cả các chỉ mục đã tồn tại", 
                          
                            //
                          
                          
                             Lời nhắc đã tồn tại
                          
                          
    "Được" : 1.0
                          
                            
}


                          
                          
                            //
                          
                          
                             Tạo chỉ mục tổng hợp
                          
                          
db.dailyTrip.createIndex({"parent_type":1, "car_type":1
                          
                            })

                          
                          
                            //
                          
                          
                             Bạn cũng có thể chỉ định tên chỉ mục tùy chỉnh
                          
                          
db.dailyTrip.createIndex({"parent_type":1, "car_type":1}, { tên: "inx_parantType_carType" })  
                          
                            //
                          
                          
                             Hãy tự mình kiểm tra tại đây
                          
                          
                            //
                          
                          
                             Từ tài liệu chính thức https://www.mongodb.com/docs/manual/reference/command/createIndexes/ 
                          
                        

  。

 Sau khi tạo xong, hãy kiểm tra lại tình trạng chỉ mục hiện tại.

  。

4. Xóa

ngữ pháp:

                          
                            Xóa tất cả các chỉ mục trong bộ sưu tập đã chỉ định: db.collection.dropIndexes(); Xóa các chỉ mục cụ thể trong bộ sưu tập đã chỉ định: db.collection.dropIndex(
                          
                          "tên chỉ mục");
                        

Ví dụ

                          
                            //
                          
                          
                             Xóa chỉ mục đã chỉ định
                          
                          
db.dailyTrip.dropIndex("car_type_1"
                          
                            );


                          
                          
                            //
                          
                          
                             Trả về kết quả
                          
                          
                            {
    
                          
                          "nIndexesWas" : 3.0, 
                          
                            //
                          
                          
                             Cho biết số lượng chỉ mục tồn tại trong bộ sưu tập trước khi chỉ mục bị xóa.
                          
                          
    "Được" : 1.0
                          
                            
}


                          
                          
                            //
                          
                          
                             Xóa tất cả và tự mình thử chúng. Lưu ý rằng chỉ mục của khóa chính _id sẽ không và không thể xóa được. 
                          
                          
dropIndexes();
                        

  。

5. Sửa đổi

Nó không thể được sửa đổi trực tiếp. Nếu bạn cần điều chỉnh thứ tự của các trường chỉ mục, tên và chỉ mục kết hợp, trước tiên bạn cần xóa chỉ mục gốc rồi tạo chỉ mục mới.

6. Nguyên tắc sử dụng chỉ mục

  1. Chọn các trường được truy vấn thường xuyên để tạo chỉ mục. Các trường xuất hiện thường xuyên trong các điều kiện truy vấn, các thao tác sắp xếp và tổng hợp là những lựa chọn tốt nhất.

  2. Chọn các trường thích hợp thường được sử dụng làm điều kiện truy vấn và xác định toàn diện xem có thể sử dụng chỉ mục tổng hợp hay không. Nếu vậy, hãy ưu tiên cho chỉ mục tổng hợp. Ví dụ: trong hầu hết các trường hợp, truy vấn dựa trên các trường A, B, C hoặc A, B. Sau đó, bạn có thể ưu tiên tạo chỉ mục tổng hợp dựa trên các trường A, B và C. Sử dụng chỉ mục tổng hợp để bao gồm nhiều điều kiện truy vấn nhằm giảm số lượng chỉ mục.

  3. Hãy thử sử dụng phạm vi bao phủ chỉ mục, tương tự như phạm vi bao phủ chỉ mục trong MySQL. Chỉ mục bao trùm có nghĩa là chỉ mục chứa các trường mà truy vấn yêu cầu, do đó tránh được nhu cầu truy vấn truy cập vào tài liệu thực tế. Điều này có thể cải thiện hiệu suất truy vấn và giảm hoạt động IO. Trên thực tế, điều này có liên quan đến chỉ số tổng hợp ở trên.

  4. Những tính năng khác bao gồm sử dụng Giải thích để xem kế hoạch thực hiện, thường xuyên theo dõi hiệu suất, xóa các chỉ mục dư thừa và vô dụng, v.v. Trên đây là những phương pháp và nguyên tắc phổ biến dựa trên kinh nghiệm phát triển thực tế.

      。

7. Tình trạng lỗi chỉ mục

  1. Điều kiện truy vấn không thỏa mãn tiền tố chỉ mục: Ví dụ: nếu chỉ mục tổng hợp là { a: 1, b: 1 } nhưng điều kiện truy vấn chỉ chứa { b: 1 } thì chỉ mục tổng hợp sẽ không được sử dụng.

  2. Kiểu dữ liệu không khớp: Nếu kiểu dữ liệu trong điều kiện truy vấn không khớp với kiểu dữ liệu của trường chỉ mục thì chỉ mục đó có thể không được sử dụng. Ví dụ: nếu trường chỉ mục có kiểu số và giá trị kiểu chuỗi được sử dụng trong điều kiện truy vấn thì chỉ mục sẽ không được sử dụng.

    // Tương tự như chuyển đổi ngầm định trong Mysql, chỉ mục sẽ không hợp lệ.

  3. Độ chọn lọc chỉ số thấp: Độ chọn lọc của một chỉ mục đề cập đến mức độ độc đáo của các giá trị khác nhau trong chỉ mục. Nếu độ chọn lọc của chỉ mục thấp, nghĩa là các giá trị trong chỉ mục gần như giống nhau thì việc sử dụng chỉ mục có thể không mang lại hiệu suất tăng đáng kể.

    // Điều này thực sự đề cập đến sự khác biệt giữa các giá trị của cột chỉ mục. Nếu độ lặp lại quá cao, hiệu suất sử dụng chỉ mục có thể không tốt bằng việc không sử dụng nó và trình tối ưu hóa cơ bản của chỉ mục có thể không. chọn sử dụng chỉ mục. Nếu trường giới tính chỉ có hai giá trị là nam và nữ, một nửa dữ liệu là nam và nửa còn lại là nữ thì tốt hơn nên sử dụng chỉ số giới tính vào thời điểm này.

  4. Sử dụng toán tử không được hỗ trợ: Một số toán tử truy vấn có thể không sử dụng được chỉ mục. Ví dụ: truy vấn biểu thức chính quy, truy vấn mờ (chẳng hạn như toán tử văn bản $), v.v. có thể không tận dụng tối đa lợi thế của chỉ mục.

  5. Kích thước dữ liệu nhỏ: Khi lượng dữ liệu trong bộ sưu tập nhỏ, MongoDB có thể chọn quét toàn bộ bảng thay vì sử dụng chỉ mục vì quét toàn bộ bảng có thể nhanh hơn.

    // Tương tự như mysql, thông thường không nên thêm chỉ mục nếu có ít hơn 1000 mục nhập, vì các chỉ mục có thêm chi phí bổ sung.

  6. Chỉ mục lỗi thời hoặc bị hỏng: Nếu một chỉ mục lỗi thời hoặc bị hỏng, MongoDB sẽ không thể sử dụng nó.

  7. Chỉ mục bị vô hiệu hóa: Nếu chỉ mục bị tắt khi truy vấn hoặc công cụ lưu trữ của chỉ mục không hỗ trợ truy vấn thì chỉ mục sẽ không được sử dụng.

  8. Kích thước chỉ mục quá lớn: Nếu kích thước của chỉ mục vượt quá giới hạn của MongoDB, chỉ mục có thể không được sử dụng.

Sử dụng phương thức giải thích() để xem kế hoạch truy vấn và cách sử dụng chỉ mục, giúp xác định nguyên nhân gây ra lỗi chỉ mục và tối ưu hóa tương ứng.

Tiếp theo, chúng tôi sẽ giải thích phương pháp Giải thích.

  。

  。

2. Kế hoạch thực hiện Giải thích()

1. Kế hoạch thực hiện Giải thích() là gì?

  1. giải thích() là một phương thức (hàm) được sử dụng để giải thích truy vấn và phân tích hiệu suất.

  2. Phương thức giải thích() có thể được gọi dựa trên kết quả của các hoạt động truy vấn như find(), tổng hợp() và count().

  3. Chức năng của nó:

    1. Số liệu giúp bạn hiểu kế hoạch thực hiện, cách sử dụng chỉ mục và hiệu suất truy vấn của truy vấn.

    2. Sau khi gọi phương thức này. MongoDB sẽ trả về một tài liệu (kết quả) chứa kế hoạch thực hiện truy vấn (chi tiết như sau), chứa các thông tin như quyết định của trình tối ưu hóa truy vấn, cách sử dụng chỉ mục và số lượng tài liệu được quét. Bằng cách phân tích kế hoạch thực hiện được giải thích() trả về, bạn có thể xác định xem các chỉ mục thích hợp có được sử dụng hay không và liệu có các vấn đề tiềm ẩn về hiệu suất hay không, đồng thời thực hiện tối ưu hóa chỉ mục, viết lại truy vấn và các hoạt động khác nếu cần để cải thiện hiệu suất truy vấn.

  4. Trả về kết quả thực hiện kế hoạch:

    • queryPlanner: Các quyết định và thống kê của trình tối ưu hóa truy vấn.

    • chiến thắngPlan: Kế hoạch thực hiện tốt nhất được trình tối ưu hóa chọn.

    • ExecutionStats: Thống kê về kế hoạch thực hiện, chẳng hạn như số lượng tài liệu được quét, thời gian truy vấn, v.v.

    • serverInfo: Thông tin máy chủ MongoDB.

Lưu ý: Đầu ra của giải thích()` rất dài dòng và chứa nhiều thông tin. Do đó, nó rất hữu ích khi gỡ lỗi và tối ưu hóa các truy vấn, nhưng không nên sử dụng thường xuyên trong môi trường sản xuất để tránh tác động tiêu cực đến hiệu suất.

Tài liệu chính thức:

  • Mô tả chi tiết về giải thích https://www.mongodb.com/docs/v5.0/reference/command/explain/.

  • Mô tả chi tiết về kết quả trả về của giải thích https://www.mongodb.com/docs/v5.0/reference/explain-results/.

2. Giải thích cú pháp và cách sử dụng

                          
                            ngữ pháp

                          
                          
                            //
                          
                          
                             Đối với các câu lệnh thông thường, hãy thêm giải thích ngay sau câu lệnh hoặc bạn có thể di chuyển nó trước find.  
                          
                          
db.collection.find({}).explain(
                          
                            );


                          
                          
                            //
                          
                          
                             Để phân tích kế hoạch thực hiện của quy trình tổng hợp, hãy đặt phần giải thích lên hàng đầu. 
                          
                          
db.collection.explain(
                          
                            ).tổng hợp([]);


                          
                          
                          
                             là một chế độ đầu ra tùy chọn. Nếu bạn không viết gì, chẳng hạn như db.collection.find({
                          
                          "name""://one Piece"}).explain(); thì mongo sẽ sử dụng chế độ mặc định "queryPlanner"
                          
                            . Nếu bạn muốn chỉ định chế độ, hãy thêm nó trực tiếp, chẳng hạn như db.collection.find({
                          
                          "tên"":"onepiece"}).explain("executionStats")
                        

giải thích có ba chế độ:

  1. queryPlanner (mặc định): chỉ liệt kê tất cả các kế hoạch thực hiện có thể có, không thực thi câu lệnh thực tế và hiển thị kế hoạch chiến thắng (kế hoạch truy vấn tốt nhất).

  2. execStats: Chỉ thực hiện kế hoạch chiến thắng và đưa ra kết quả.

  3. allPlansExecution: Thực hiện tất cả các kế hoạch và đưa ra kết quả.

Để biết các thông số giải thích, vui lòng tham khảo trang web chính thức: https://www.mongodb.com/docs/v5.0/reference/method/cursor.explain/#std-label-explain-cursor-method-verbosity.

  。

3. Mô tả và giải thích kết quả theo ba chế độ

3.1 Chế độ queryPlanner

Chạy trình tối ưu hóa truy vấn để đánh giá truy vấn hiện tại và chọn gói truy vấn tối ưu mà không cần thực thi câu lệnh thực tế.

  。

Ba chế độ sau đây đều sử dụng câu lệnh truy vấn này làm ví dụ:

                          db.getCollection("dailyTrip").explain().find({"parent_type":"Ứng dụng gọi xe"}, { _id:0});
                        

Sau đây là kết quả trả về của quá trình thực thi, trước tiên tôi sẽ ẩn các chi tiết và bạn có thể xem những trường nào được trả về.

  。

Giải thích cụ thể.

                          
                            {
    
                          
                          "explainVersion" : "1",  
                          
                            //
                          
                          
                             Phiên bản của kế hoạch thực hiện, có thể bỏ qua 
                          
                          
    "Trình lập kế hoạch truy vấn": {     
                          
                            //
                          
                          
                              queryPlanner là kế hoạch thực hiện. Tập trung vào phần này
                          
                          
        "không gian tên" : "test.dailyTrip",  
                          
                            //
                          
                          
                             Đây là bộ sưu tập và db nơi nó nằm
                          
                          
        "Bộ lọc chỉ mục": 
                          
                            SAI
                          
                          ,   
                          
                            //
                          
                          
                             Cho dù bộ lọc chỉ mục có được đặt hay không, Bộ lọc sẽ xác định cách trình tối ưu hóa truy vấn sẽ sử dụng chỉ mục cho một truy vấn nhất định
                          
                          
        "parsedQuery": {    
                          
                            //
                          
                          
                             Nội dung truy vấn được phân tích cú pháp.
                          
                          
            "kiểu_cha_mẹ"
                          
                             : {
                
                          
                          "$eq" : "Ứng dụng gọi xe"
                          
                            
            } },
        
                          
                          "queryHash": "8B8C334A",  
                          
                            //
                          
                          
                             giá trị băm của truy vấn,
                          
                          
        "planCacheKey" : "F910A33F", 
                          
                            //
                          
                          
                             Khóa bộ đệm của kế hoạch thực hiện truy vấn
                          
                          
        "maxIndexedOrSolutionsReached": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Liệu đã đạt đến giới hạn chỉ số [hoặc] giải pháp tối đa hay chưa. nhảy qua
                          
                          
        "maxIndexedAndSolutionsReached": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Cho biết liệu đã đạt đến giới hạn giải pháp chỉ số [tổng] tối đa hay chưa. nhảy qua
                          
                          
        "maxScansToExplodeĐã đạt tới": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Liệu đã đạt được số lần quét tối đa hay chưa. nhảy qua
                          
                          
        "Kế hoạch chiến thắng": {   
                          
                            //
                          
                          
                             Đây là kế hoạch thực hiện việc lựa chọn lớp dưới cùng cuối cùng.   
                          
                          
            "giai đoạn" : "PROJECTION_DEFAULT",  
                          
                            //
                          
                          
                             Giai đoạn đề cập đến bước mà bạn có thể thấy chính xác những gì đã được thực hiện bởi tên sân khấu. phép chiếu là áp dụng thao tác chiếu và chọn các trường bắt buộc
                          
                          
            "biến đổiBởi": { 
                          
                            //
                          
                          
                             Nội dung chiếu cụ thể bị bỏ qua
                          
                          
                "_id" : 0.0
                          
                            
            },
            
                          
                          "Giai đoạn đầu vào": { 
                          
                            //
                          
                          
                             Giai đoạn phụ của giai đoạn thực thi, đây là quy trình phụ của FETCH
                          
                          
                "sân khấu": "LẤY",   
                          
                            //
                          
                          
                             FETCH lấy dữ liệu tài liệu từ chỉ mục.
                          
                          
                "Giai đoạn đầu vào": { 
                          
                            //
                          
                          
                             Một trong những giai đoạn, hoạt động cụ thể. Những gì bên trong là điều quan trọng để xem xét. 
                          
                          
                    "sân khấu" : "IXSCAN", 
                          
                            //
                          
                          
                             Điều này đề cập đến việc sử dụng chỉ mục để quét, thường có nghĩa là các truy vấn được tối ưu hóa.
                          
                          
                    "Mẫu chìa khóa": { 
                          
                            //
                          
                          
                             Cho biết sự sắp xếp của các trường chỉ mục sau, 1.0 theo thứ tự thuận, -1.0 theo thứ tự ngược lại.
                          
                          
                        "kiểu_cha_mẹ" : 1.0
                          
                            ,
                        
                          
                          "kiểu_xe" : 1.0
                          
                            
                    },
                    
                          
                          "indexName" : "parent_type_1_car_type_1", 
                          
                            //
                          
                          
                             Tên chỉ mục được sử dụng
                          
                          
                    "isMultiKey": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Cho dù đó là một chỉ mục đa khóa. Nếu đúng, chỉ ra rằng chỉ mục chứa giá trị mảng
                          
                          
                    "multiKeyPath": { 
                          
                            //
                          
                          
                             Nếu chỉ mục là chỉ mục nhiều khóa, thuộc tính này sẽ chứa đường dẫn đến trường trong chỉ mục chứa giá trị mảng. Chỉ mục trong ví dụ này không phải là chỉ mục nhiều khóa, vì vậy các trường bên dưới là mảng trống.
                          
                          
                        "kiểu_cha_mẹ"
                          
                             : [ ],
                        
                          
                          "kiểu_xe"
                          
                             : [ ] },
                    
                          
                          "là duy nhất": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Cho dù đó là một chỉ mục duy nhất
                          
                          
                    "isSparse": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Cho dù đó là một chỉ mục thưa thớt
                          
                          
                    "làPartial": 
                          
                            SAI
                          
                          , 
                          
                            //
                          
                          
                             Đây có phải là chỉ mục một phần không?
                          
                          
                    "indexVersion" : 2.0, 
                          
                            //
                          
                          
                             phiên bản chỉ mục 
                          
                          
                    "hướng": "hướng về phía trước", 
                          
                            //
                          
                          
                             Hướng di chuyển chỉ mục
                          
                          
                    "indexBounds": {  
                          
                            //
                          
                          
                             Chỉ mục cụ thể được sử dụng bởi truy vấn hiện tại
                          
                          
                        "kiểu_cha_mẹ"
                          
                             : [
                            
                          
                          "[\"Ứng dụng gọi xe\", \"Ứng dụng gọi xe\"]"
                          
                            
                        ],
                        
                          
                          "kiểu_xe"
                          
                             : [
                            
                          
                          "[Khóa nhỏ, Khóa lớn]"
                          
                            
                        ] } } } },
        
                          
                          "Kế hoạch bị từ chối" : [  
                          
                            //
                          
                          
                             Các kế hoạch bị trình tối ưu hóa cơ bản từ chối, các kế hoạch không được thực thi.  
                          
                          
                                    ] },
    
                          
                          "yêu cầu" : {   
                          
                            //
                          
                          
                             Các lệnh, bộ sưu tập và DB liên quan cụ thể đến câu lệnh
                          
                          
        "tìm" : "chuyến đi hàng ngày",  
                          
                            //
                          
                          
                             Tên bảng nên được tìm kiếm từ bộ sưu tập nào?
                          
                          
        "lọc" : {   
                          
                            //
                          
                          
                             Giai đoạn nào, ở đây là lọc
                          
                          
            "parent_type" : "Ứng dụng gọi xe"
                          
                            
        },
        
                          
                          "chiếu" : {   
                          
                            //
                          
                          
                             Phép chiếu kiểm soát trường nào sẽ trả về 
                          
                          
            "_id" : 0.0
                          
                            
        },
        
                          
                          "$db" : "kiểm tra"   
                          
                            //
                          
                          
                             Thư viện
                          
                          
                                },
    
                          
                          "Thông tin máy chủ": {     
                          
                            //
                          
                          
                             Thông tin máy chủ   
                          
                          
        "máy chủ" : "onepiece-pc",  
                          
                            //
                          
                          
                             Tên máy chủ mẫu cho mongo
                          
                          
        "cổng" : 27017.0, 
                          
                            //
                          
                          
                              hải cảng
                          
                          
        "phiên bản" : "5.0.9", 
                          
                            //
                          
                          
                             phiên bản mongodb
                          
                          
        "gitVersion": "6f7dae919422dcd7******************1ad00e6"  
                          
                            //
                          
                          
                             Đây là phiên bản git, ở đây không thành vấn đề, tôi không còn nhạy cảm nữa. 
                          
                          
                                },
    
                          
                          "Tham số máy chủ": {   
                          
                            //
                          
                          
                             Các tham số máy chủ, các kích thước bộ đệm khác nhau và cài đặt ngưỡng tối đa không liên quan gì đến những gì chúng ta đang nói ở đây vào lúc này, vì vậy hãy bỏ qua chúng.
                          
                          
        "internalQueryFacetBufferSizeBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalQueryFacetMaxOutputDocSizeBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalDocumentSourceGroupMaxMemoryBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalQueryProhibitBlockingMergeOnMongoS" : 0.0
                          
                            ,
        
                          
                          "internalQueryMaxAddToSetBytes" : 104857600.0
                          
                            ,
        
                          
                          "internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600.0
                          
                            
    },
    
                          
                          "Được" : 1.0
                          
                            
}
                          
                        

3.2 Chế độ thực thiStats

                          db.getCollection("dailyTrip").find({"parent_type":"Ứng dụng gọi xe"}, { _id:0}).explain("executionStats");
                        

Chạy trình tối ưu hóa truy vấn để đánh giá truy vấn hiện tại và chọn kế hoạch truy vấn tối ưu để thực hiện. Sau khi hoàn thành việc thực hiện, thông tin thống kê có liên quan về việc hoàn thành kế hoạch thực hiện tối ưu sẽ được trả về.

  。

                          
                            {
    
                          
                          "explainVersion" : "1"
                          
                            ,
    
                          
                          "Trình lập kế hoạch truy vấn"
                          
                             : {
        
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
        "ParsedQuery"
                          
                             : {
           
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                    },
        
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
        "Kế hoạch chiến thắng"
                          
                             : {
           
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                    }
        
                          
                          "Kế hoạch bị từ chối"
                          
                             : [
           
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                    ] },
    
                          
                          "executionStats": { 
                          
                            //
                          
                          
                             Hãy chú ý đến nội dung ở đây
                          
                          
        "executionSuccess": 
                          
                            ĐÚNG VẬY
                          
                          ,  
                          
                            //
                          
                          
                             Kết quả thực hiện
                          
                          
        "nTrả về": 23010.0,  
                          
                            //
                          
                          
                             Số lượng tài liệu được trả lại
                          
                          
        "executionTimeMillis" : 70.0, 
                          
                            //
                          
                          
                             Thời gian thực hiện tính bằng ms
                          
                          
        "totalKeysExamined" : 23010.0,  
                          
                            //
                          
                          
                             Tổng số chỉ mục được quét
                          
                          
        "totalDocsExamined" : 23010.0,  
                          
                            //
                          
                          
                             Tổng số tài liệu được quét
                          
                          
        "Giai đoạn thực hiện": {  
                          
                            //
                          
                          
                             Sẽ có thông tin chi tiết về từng giai đoạn trong giai đoạn thực hiện.
                          
                          
            "giai đoạn" : "PROJECTION_DEFAULT",  
                          
                            //
                          
                          
                             loại sân khấu
                          
                          
            "nĐã trả về" : 23010.0
                          
                            , 
            
                          
                          "executionTimeMillisEstimate" : 10.0, 
                          
                            //
                          
                          
                             Thời gian thực hiện ước tính ms
                          
                          
            "hoạt động" : 23011.0,  
                          
                            //
                          
                          
                             Số lượng nhiệm vụ quét trong giai đoạn
                          
                          
            "nâng cao": 23010.0, 
                          
                            //
                          
                          
                             Số lượng cam kết trở lên trong giai đoạn
                          
                          
            "cần thời gian" : 0.0, 
                          
                            //
                          
                          
                             Số lần cần thiết để xác định vị trí chỉ mục trong giai đoạn
                          
                          
            "cần phải đạt được" : 0.0, 
                          
                            //
                          
                          
                             Thời gian chờ đợi để có được khóa trong màn chơi
                          
                          
            "saveState" : 23.0, 
                          
                            //
                          
                          
                             : Cho biết thời gian ms dành để lưu trạng thái trung gian trong quá trình thực hiện truy vấn.
                          
                          
            "khôi phục trạng thái" : 23.0, 
                          
                            //
                          
                          
                             Cho biết thời gian tính bằng mili giây dành để khôi phục trạng thái trung gian đã lưu trước đó trong quá trình thực hiện truy vấn.
                          
                          
            "isEOF" : 1.0, 
                          
                            //
                          
                          
                             Cho dù đạt đến bit cuối của luồng trong giai đoạn hay không, truy vấn cho bộ giới hạn giới hạn có thể là 0
                          
                          
            "biến đổiBởi": { 
                          
                            //
                          
                          
                             Cho biết liệu kế hoạch truy vấn có sử dụng các thao tác chiếu để chuyển đổi kết quả hay không 
                          
                          
                "_id" : 0.0
                          
                            
            },
            
                          
                          "Giai đoạn đầu vào": { 
                          
                            //
                          
                          
                             Giai đoạn phụ của giai đoạn thực thi, đây là quy trình phụ của việc tìm nạp
                          
                          
                "sân khấu": "LẤY", 
                          
                            //
                          
                          
                             Nội dung gần như giống nhau 
                          
                          
                "nĐã trả về" : 23010.0
                          
                            ,
                
                          
                          "executionTimeMillisEstimate" : 4.0
                          
                            ,
                
                          
                          "hoạt động" : 23011.0
                          
                            ,
                
                          
                          "nâng cao" : 23010.0
                          
                            ,
                
                          
                          "cần thời gian" : 0.0
                          
                            ,
                
                          
                          "cần năng suất" : 0.0
                          
                            ,
                
                          
                          "saveState" : 23.0
                          
                            ,
                
                          
                          "khôi phục trạng thái" : 23.0
                          
                            ,
                
                          
                          "isEOF" : 1.0
                          
                            ,
                
                          
                          "docsExamined" : 23010.0
                          
                            ,
                
                          
                          "alreadyHasObj" : 0.0
                          
                            ,
                
                          
                          "Giai đoạn đầu vào": { 
                          
                            //
                          
                          
                              Substage, quy trình con ixscan
                          
                          
                    "sân khấu" : "IXSCAN"
                          
                            ,
                    
                          
                          "nĐã trả về" : 23010.0
                          
                            ,
                    
                          
                          "executionTimeMillisEstimate" : 4.0
                          
                            ,
                    
                          
                          "hoạt động" : 23011.0
                          
                            ,
                    
                          
                          "nâng cao" : 23010.0
                          
                            ,
                    
                          
                          "cần thời gian" : 0.0
                          
                            ,
                    
                          
                          "cần năng suất" : 0.0
                          
                            ,
                    
                          
                          "saveState" : 23.0
                          
                            ,
                    
                          
                          "khôi phục trạng thái" : 23.0
                          
                            ,
                    
                          
                          "isEOF" : 1.0
                          
                            ,
                    
                          
                          "Mẫu chìa khóa"
                          
                             : {
                        
                          
                          "kiểu_cha_mẹ" : 1.0
                          
                            ,
                        
                          
                          "kiểu_xe" : 1.0
                          
                            
                    },
                    
                          
                          "indexName" : "parent_type_1_car_type_1"
                          
                            ,
                    
                          
                          "isMultiKey": 
                          
                            SAI
                          
                          
                            ,
                    
                          
                          "multiKeyPath"
                          
                             : {
                        
                          
                          "kiểu_cha_mẹ"
                          
                             : [ ],
                        
                          
                          "kiểu_xe"
                          
                             : [ ] },
                    
                          
                          "là duy nhất": 
                          
                            SAI
                          
                          
                            ,
                    
                          
                          "isSparse": 
                          
                            SAI
                          
                          
                            ,
                    
                          
                          "làPartial": 
                          
                            SAI
                          
                          
                            ,
                    
                          
                          "indexVersion" : 2.0
                          
                            ,
                    
                          
                          "hướng" : "hướng về phía trước"
                          
                            ,
                    
                          
                          "indexBound"
                          
                             : {
                        
                          
                          "kiểu_cha_mẹ"
                          
                             : [
                            
                          
                          "[\"Ứng dụng gọi xe\", \"Ứng dụng gọi xe\"]"
                          
                            
                        ],
                        
                          
                          "kiểu_xe"
                          
                             : [
                            
                          
                          "[Khóa nhỏ, Khóa lớn]"
                          
                            
                        ] },
                    
                          
                          "keysExamined" : 23010.0
                          
                            ,
                    
                          
                          "tìm kiếm" : 1.0
                          
                            ,
                    
                          
                          "dupsĐã kiểm tra" : 0.0
                          
                            ,
                    
                          
                          "dupsDropped" : 0.0
                          
                            
                } } } },
    
                          
                          "yêu cầu" : { 
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Thông tin máy chủ": { 
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Tham số máy chủ": {
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Được" : 1.0
                          
                            
}
                          
                        

3.3 Chế độ allPlansExecution

                          
                            //
                          
                          
                             Gọi giải thích("allPlansExecution") trong chế độ allPlansExecution để thực hiện tất cả các kế hoạch và đưa ra kết quả.
                          
                          
db.getCollection("dailyTrip").find({"parent_type":"Ứng dụng gọi xe"}, { _id:0}).explain("allPlansExecution");
                        

So với execStats, allPlansExecution cũng sẽ thực thi các kế hoạch thực thi thay thế khác và tính toán kết quả. Sẽ được lưu trữ trong execStats.

Nghĩa là thực hiện theo kế hoạch thực hiện tốt nhất và liệt kê thông tin thống kê. Nếu có nhiều kế hoạch truy vấn thì thông tin thống kê của các phần kế hoạch thực hiện không tối ưu này cũng sẽ được liệt kê.

  。

                          
                            {
    
                          
                          "explainVersion" : "1"
                          
                            ,
    
                          
                          "Trình lập kế hoạch truy vấn"
                          
                             : {
        
                          
                          "không gian tên": "test.dailyTrip"
                          
                            ,
        
                          
                          "Bộ lọc chỉ mục": 
                          
                            SAI
                          
                          
                            ,
        
                          
                          "ParsedQuery"
                          
                             : {
            
                          
                          "kiểu_cha_mẹ"
                          
                             : {
                
                          
                          "$eq" : "Ứng dụng gọi xe"
                          
                            
            } },
        
                          
                          "maxIndexedOrSolutionsReached": 
                          
                            SAI
                          
                          
                            ,
        
                          
                          "maxIndexedAndSolutionsReached": 
                          
                            SAI
                          
                          
                            ,
        
                          
                          "maxScansToExplodeĐã đạt tới": 
                          
                            SAI
                          
                          
                            ,
        
                          
                          "Kế hoạch chiến thắng"
                          
                             : {
           
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                    },
        
                          
                          "Kế hoạch bị từ chối"
                          
                             : [
           
                          
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                    ] },
    
                          
                          "Thống kê thực thi"
                          
                             : {
        
                          
                          "executionSuccess": 
                          
                            ĐÚNG VẬY
                          
                          
                            ,
        
                          
                          "nĐã trả về" : 23010.0
                          
                            ,
        
                          
                          "executionTimeMillis" : 68.0
                          
                            ,
        
                          
                          "totalKeysExamined" : 23010.0
                          
                            ,
        
                          
                          "totalDocsExamined" : 23010.0
                          
                            ,
        
                          
                          "Giai đoạn thực hiện"
                          
                             : {
         
                          
                          
                            //
                          
                          
                             Giai đoạn thực thi ở đây giống như các giai đoạn thực thi trong execStats của 2.2, hãy tham khảo điều đó. 
                          
                          
                                    },
        
                          
                          "allPlansExecution" : [  
                          
                            //
                          
                          
                             Điểm mấu chốt: allPlansExecution Nếu có các kế hoạch thực hiện khác, kết quả thống kê thực hiện sẽ được công bố tại đây.   
                          
                          
                                    ] },
    
                          
                          "yêu cầu" : {
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Thông tin máy chủ": {
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Tham số máy chủ": {
                          
                            //
                          
                          
                             ... Tương tự như trên, bỏ qua.
                          
                          
                                },
    
                          
                          "Được" : 1.0
                          
                            
}
                          
                        

Giá trị tham số giai đoạn

  • COLLSCAN: quét toàn bộ bảng.

  • IXSCAN: quét chỉ mục.

  • FETCH: Truy xuất tài liệu được chỉ định dựa trên chỉ mục.

  • SHARD_MERGE: Hợp nhất dữ liệu được trả về từ mỗi phân đoạn.

  • SORT:表明在内存中进行了排序 。

  • LIMIT:使用limit限制返回数 。

  • SKIP:使用skip进行跳过 。

  • IDHACK:针对_id进行查询 。

  • SHARDING_FILTER:通过mongos对分片数据进行查询 ---服务器是分片的才有.

  • COUNT:利用db.coll.explain().count()之类进行count运算 。

  • COUNTSCAN: count不使用Index进行count时的stage返回 。

  • COUNT_SCAN: count使用了Index进行count时的stage返回 。

  • SUBPLA:未使用到索引的$or查询的stage返回 。

  • TEXT:使用全文索引进行查询时候的stage返回 。

  • PROJECTION:限定返回字段时候stage的返回 。

参考文档

https://www.cnblogs.com/littleatp/p/8419678.html 。

  。

4. 查询优化思路

  • 尽量使用索引。 举例,比如通过上面的执行计划发现某个作为查询条件的字段,没有用上索引,且通过索引可以极大提高性能,那么可以考虑对该字段增加索引.

  • 扫描文档数越小越好。举例,比如上面的执行计划中,某个阶段返回的扫描文档数量极大,那么可以考虑优化语句,比如调整语句顺序,先过滤再处理;或者对查询条件字段增加索引.

  。

完.

感谢查阅,希望对你有帮助,点个赞再走呗~ 。

最后此篇关于MongoDB索引操作和执行计划Explain()详解的文章就讲到这里了,如果你想了解更多关于MongoDB索引操作和执行计划Explain()详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

32 4 0
tôi là một con chim nhỏ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress