使用 __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 条目)中的任何性能差异,但您会在更大的数据库中看到它。
如果我在使用 __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 条目)中的任何性能差异,但您会在更大的数据库中看到它。