2016-09-15 59 views
0

括號是否會影響在WHERE子句中應用過濾器條件的順序?假設我有上千個文檔:DocumentDB括號中WHERE

{ 
    "batchId": "<random_guid>", 
    "size": "<small, medium, or large>", 
    "details": 
    { 
     ... 
    } 
} 

現在在我的收藏中,所有文檔都屬於50個批次之一。批量按尺寸進一步細分,每批大約有1000個文件。

因此在批量x與大小small查詢所有文檔時,我想先過濾掉所有那些不屬於批量x,然後從該子集,以減少文件數量進行搜索,的文件只選擇那些大小爲small的文件。

將這個查詢實現上述行爲:SELECT * FROM r WHERE ((r.batchId = 'x') AND r.size = 'small')

回答

1

括號不會影響過濾器表達式是如何評估的。對於表達式評估順序,這裏可能要緊的是WHERE子句中的表達式順序(即(r.batchId ='x'AND r.size ='small')與(r.size ='small'AND r。 batchId ='x'))。雖然查詢引擎對錶達式進行重新排序以實現最佳執行計劃,但如果它確定沒有通過更改順序而感知到的收益,它將保留輸入查詢表達式順序。 在這種特殊情況下,順序無關緊要,因爲兩個表達式都將根據索引進行評估,只有滿足這兩個條件的文檔纔會被加載。