find和sort同时使用时,mongodb是如何处理的?
大家讲道理
大家讲道理 2017-05-02 09:20:21
0
1
576

今天在mongodb索引帮助文档里发现下边的描述:
集合order有以下索引:

{ qty: 1 }
{ status: 1, ord_date: -1 }
{ status: 1 }
{ ord_date: -1 }

查询语句:

db.orders.find( { qty: { $gt: 10 } } ).sort( { status: 1 } )

That is, MongoDB does not use the { qty: 1 } index for the query, and the separate { status: 1 } or the { status: 1, ord_date: -1 } index for the sort.

sort不能使用{ status: 1 } 或 { status: 1, ord_date: -1 } 我能理解,但是为什么find不能使用{ qty: 1 } 这个索引呢?

补充:是我理解错了,查询最后使用了{qty:1}这个索引

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(1)
PHPzhong

Pertama sekali, izinkan saya bertanya soalan, adakah anda telah mencuba indeks mana yang digunakan dalam pertanyaan ini?
Beritahu saya tentang perenggan itu dalam bahasa Inggeris sekali lagi saya rasa anda mungkin salah faham maksudnya. Ayat ini bermaksud: enjin pertanyaan tidak akan menggunakan {qty:1} untuk memenuhi find daripada dan pada masa yang sama akan menggunakan {status: 1} atau {status: 1, ord_date: -1} untuk memenuhi sort. Biar saya nyatakan dengan lebih jelas: pertanyaan sama ada menggunakan {qty: 1} untuk memenuhi find (dan kemudian menggunakan pengisihan memori), atau menggunakan {status: 1} atau {status: 1, ord_date: -1} untuk memenuhi pengisihan (tetapi hanya boleh mencari keputusan yang ditetapkan melalui pengimbasan set ).
Tiada indeks dalam indeks sedia ada anda yang boleh memenuhi kedua-dua pertanyaan dan pengisihan Indeks yang boleh mencapai tujuan ini ialah: {status: 1, qty: 1}. Tetapi masalahnya ialah ini tidak semestinya pilihan yang baik. Mungkin {qty: 1}+pengisihan memori akan menjadi lebih cekap. Semuanya bergantung pada pengedaran data anda. Prinsip khusus sebenarnya sama dengan indeks dalam RDBMS, atau indeks menggunakan pokok B/B+ mempunyai kebaikan ini. Jika anda tidak dapat menerangkannya dengan jelas dalam beberapa perkataan, mari cari maklumat yang berkaitan.
Cara mudahnya ialah membina semua indeks yang baru disebut, kemudian jalankan pertanyaan ini dan biarkan mereka mengoyakkannya sendiri Pada akhirnya, enjin pertanyaan akan memilih indeks terbaik untuk anda berdasarkan data sampel.
Jadi kembali kepada soalan asal, adakah anda telah mencuba indeks yang mana untuk dipilih? Kerana indeks mana yang menang akhirnya ditentukan berdasarkan pengedaran data anda, tiada jawapan yang pasti di sini. Saya sanggup bertaruh {status: 1, qty: 1} untuk menang.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan