Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào mà bản ghi / logic fanout này bắt nguồn cho trường hợp không có thống kê trong Công cụ lập kế hoạch truy vấn của MySQL?

Nếu bạn hoàn toàn không có dữ liệu về vấn đề của mình, bạn buộc phải ước tính.

Dạng chung của công thức đó được giải thích trong phần nhận xét:

  • nếu chúng tôi chỉ sử dụng một cột biểu tượng (x ) của một chỉ mục nhiều cột (với c cột), chúng tôi nhận được a hàng (1% tổng số hàng). Vì vậy, đối với x=1 , kết quả là a theo định nghĩa.
  • nếu chúng tôi biết giá trị cho mọi cột móc khóa của chỉ mục nhiều cột, chúng tôi sẽ nhận được số hàng trên mỗi toàn bộ khóa (b ); vì vậy đối với x=c , chúng tôi nhận được b hàng (là 1 hoặc 10 ) theo định nghĩa.
  • ở giữa (nếu chúng tôi sử dụng các giá trị khóa cho nhiều hơn 1 cột khóa, nhưng không phải tất cả), đối với mỗi giá trị khóa đã biết bổ sung, chúng tôi có thể loại trừ một số hàng bổ sung:chúng tôi có a-b các hàng sẽ không thuộc trường hợp chúng tôi biết đầy đủ của chúng tôi khóa (sẽ có b hàng), và theo định nghĩa, chúng sẽ bị loại trừ tương ứng với tỷ lệ của các cột móc khóa có thể sử dụng ((x-1)/(c-1) ).
  • -1 trong (x-1)/(c-1) chỉ là một sự thay đổi (bạn chỉ có thể sử dụng các tên biến khác nhau), vì chúng tôi chỉ cần tính bổ sung các cột, nhưng cx là số đếm bao gồm cột đầu tiên. (Trong một chuỗi thời gian, bạn sẽ gọi tham số cho cột đầu tiên t=0-1 làm chính xác điều đó).

Vì vậy, kết luận chúng ta nhận được a - (a-b) * (x-1)/(c-1) (a đối với cột khóa đầu tiên trừ đi các hàng mà chúng tôi loại trừ theo tỷ lệ). Đây là (nếu bạn biến đổi biểu thức đó một chút) chính xác công thức đã cho. Kiểm tra sự tỉnh táo nhanh chóng:Đối với x=1 (x-1=0 ), số hạng thứ hai là 0 và chúng tôi nhận được a , như được xác định bởi điều kiện đầu tiên; cho x=c , chúng tôi nhận được a-(a-b)=b như được xác định bởi điều kiện thứ hai.

Không phải là không hợp lý khi đưa ra ansatz này bằng cách sử dụng những giả định này, nhưng bạn có thể tìm thấy một công thức khác có ý nghĩa hơn. Tuy nhiên, để lập luận rằng tốt hơn sẽ là một nhiệm vụ khó hơn.

Sau đó là vấn đề chọn các giá trị (b=101% trong trường hợp này). Bạn rõ ràng có thể chọn bất kỳ giá trị nào. Để thực hiện điều này mà không có bất kỳ dữ liệu đáng tin cậy nào ngoại trừ cảm giác ruột, có một khái niệm được gọi là Ước tính Fermi :

Về cơ bản, bạn chỉ chọn thứ tự phóng đại (1, 1000000, 1/100) cho các thông số đầu vào của mình và bạn sẽ có được thứ tự cường độ hợp lý cho kết quả của mình.

Vậy bạn mong đợi một khóa không phải là duy nhất có bao nhiêu hàng? Nó nhiều hơn 1, nếu không bạn sẽ đặt nó thành một khóa duy nhất, nhưng nó giống 2, 10 hay 100? 10 có lẽ là một phỏng đoán tốt (nó bao gồm giá trị từ khoảng 3 đến 30 trong ước tính đó). Vì vậy, mặc dù những con số này có thể đến từ một cuộc khảo sát trên toàn thế giới kéo dài 2 năm về phân phối khóa, các giá trị ước tính theo lũy thừa của 10 thường được tính theo kiểu như vậy. Nếu bạn muốn hoàn toàn chắc chắn, hãy hỏi nhà phát triển.

xkcd bắt buộc cho loại chủ đề này: What-if? Vẽ trái đất




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngắt trang trong Html2Pdf

  2. Truy vấn Mysql trả về cây danh mục

  3. chèn vào lựa chọn trên truy vấn mysql trùng lặp

  4. java.lang.ClassNotFoundException:com.mysql.jdbc.Driver (maven + jboss)

  5. Làm cách nào để loại bỏ các ràng buộc khỏi bảng MySQL của tôi?