Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana catatan/logika fanout ini diturunkan untuk kasus tanpa statistik di Perencana Kueri MySQL?

Jika Anda sama sekali tidak memiliki data tentang masalah Anda, Anda terpaksa melakukan perkiraan.

Bentuk umum dari rumus tersebut dijelaskan di komentar:

  • jika kita hanya menggunakan satu kolom kunci (x ) dari indeks multikolom (dengan c kolom), kita mendapatkan a baris (1% dari total baris). Jadi untuk x=1 , hasilnya adalah a Menurut definisi.
  • jika kita mengetahui nilai untuk setiap kolom kunci dari indeks multikolom, kita mendapatkan jumlah baris per seluruh kunci (b ); jadi untuk x=c , kita mendapatkan b baris (yaitu 1 atau 10 ) menurut definisinya.
  • di antara (jika kita menggunakan nilai kunci untuk lebih dari 1 kolom kunci, tetapi tidak semua), untuk setiap nilai kunci tambahan yang diketahui, kita dapat mengecualikan beberapa baris tambahan:kita memiliki a-b baris yang tidak termasuk dalam kasus di mana kita tahu penuh . kita kunci (yang akan memiliki b baris), dan menurut definisi mereka harus dikecualikan secara proporsional dengan rasio kolom kunci yang dapat digunakan ((x-1)/(c-1) ).
  • -1 di (x-1)/(c-1) hanyalah sebuah shift (Anda bisa menggunakan nama variabel yang berbeda), karena kita hanya perlu menghitung tambahan kolom, tetapi c dan x adalah hitungan termasuk kolom pertama. (Dalam deret waktu, Anda akan memanggil parameter untuk kolom pertama t=0 , dan -1 melakukan hal itu).

Jadi kesimpulannya kita mendapatkan a - (a-b) * (x-1)/(c-1) (a untuk kolom kunci pertama dikurangi baris yang kami kecualikan secara proporsional). Ini (jika Anda mengubah ekspresi itu sedikit) persis dengan rumus yang diberikan. Pemeriksaan kewarasan cepat:Untuk x=1 (x-1=0 ), suku kedua adalah 0 dan kita mendapatkan a , seperti yang didefinisikan oleh kondisi pertama; untuk x=c , kita mendapatkan a-(a-b)=b seperti yang didefinisikan oleh kondisi kedua.

Bukan tidak masuk akal untuk membuat ansatz ini menggunakan asumsi-asumsi ini, tetapi Anda mungkin dapat menemukan formula lain yang lebih masuk akal. Berdebat bahwa itu lebih baik akan menjadi tugas yang lebih sulit.

Lalu ada soal memilih nilai (b=10 dan 1% pada kasus ini). Anda jelas dapat memilih nilai apa pun. Untuk melakukan ini tanpa data yang dapat diandalkan kecuali firasat, ada konsep yang disebut Perkiraan Fermi :

Anda pada dasarnya memilih hanya urutan magnit (1, 1000000, 1/100) untuk parameter input Anda, dan Anda mendapatkan urutan besarnya yang wajar untuk hasil Anda.

Jadi, berapa banyak baris yang Anda harapkan untuk dicakup oleh kunci yang tidak unik? Ini lebih dari 1, jika tidak, Anda akan menjadikannya kunci unik, tetapi apakah lebih seperti 2, 10 atau 100? 10 mungkin merupakan tebakan yang bagus (mencakup nilai dari sekitar 3 hingga 30 dalam perkiraan itu). Jadi, meskipun angka ini mungkin berasal dari survei selama 2 tahun di seluruh dunia tentang distribusi kunci, nilai perkiraan dalam pangkat 10 biasanya diturunkan dengan cara seperti itu. Jika Anda ingin benar-benar yakin, tanyakan pada pengembangnya.

Dan xkcd wajib untuk topik seperti ini:Bagaimana-jika? Melukis Bumi




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hapus informasi dari tabel mysql saat pengguna menutup Browsernya

  2. Server mysql di MAMP tidak bisa dijalankan

  3. PILIH di mana nilai baris berisi string MySQL

  4. Mysql - urutan beberapa indeks kolom

  5. Pilih mysql rekursif?