在我们的.NET应用程序中,我们使用DocumentDB SDK来查询Azure DocumentDB.当我们意识到查询中的内置字符串函数似乎对性能有很大影响时,我们试图找出性能问题的原因.
我打算粘贴我从应用程序中获得的一些统计数据,但我已经能够在操场上复制这种情况:https: //www.documentdb.com/sql/demo(点击沙箱选项卡)
使用以下查询:
SELECT *
FROM food
WHERE food.description="Babyfood, dessert, fruit pudding, orange, strained"
Run Code Online (Sandbox Code Playgroud)
我明白了:
并具有UPPER字符串功能:
SELECT *
FROM food
WHERE UPPER(food.description)=UPPER("Babyfood, dessert, fruit pudding, orange, strained")
Run Code Online (Sandbox Code Playgroud)
我明白了:
绝对数字在这里并不重要,在我们的应用程序中,我们应用于UPPER电子邮件领域,我们看到了很大的不同.操作需要1秒,没有UPPERvs 20s!
除了少数例外,每当您在字段值上使用函数时,它都无法使用索引,因此查询将成为全表扫描.解决此问题的最佳方法是将值存储在已经UPPER的另一个字段中并对其进行查询.或者,如果您可以将更高选择性的子句与UPPER()子句结合使用,您将获得更好的性能.
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |