使用 __icontains 和小写查询的区别?

Difference in using __icontains and lowercasing the query?

如果我在使用 __contains 或直接使用 __icontains 之前将查询小写,在性能上会有什么不同吗?在代码中:

这个

def search(request):
    query = (request.GET.get("q")).lower()
    if query:
        users = User.objects.filter(location__contains=query)

VS

def search(request):
    query = request.GET.get("q")
    if query:
        users = User.objects.filter(location__icontains=query)

我在将 location 插入数据库时​​将其小写。并且,查询是任何情况下都可以的查询。

欢迎提问!!!

通常,不区分大小写搜索(或LIKE操作)是通过转换LHS和RHS 为相同的大小写,小写或大写。

像这样,

SELECT *
FROM YourTable
WHERE <b>UPPER(YourColumn) = UPPER('VALUE')</b>

如果您确定您的数据库列 location 仅包含小写字符,第一个选项更好

注意:您可能看不到小型数据库(10k 条目)中的任何性能差异,但您会在更大的数据库中看到它。