Mysql 此更改如何影响此数据库查询的速度?

Mysql 此更改如何影响此数据库查询的速度?,mysql,database,django,optimization,Mysql,Database,Django,Optimization,首先,我使用这个请求: Model.object.get(name='something', date=somedatavariable) 但我需要扩展我的查询并将其更改为: Model.objects.get(name__icontains="something", date__range(start_date,end_date)) 突然,我的数据库花费的时间是原始查询的5倍。这里发生了什么,我如何才能让它更快?我怀疑是否有人能猜到,您的数据库到底是如何工作的:-)但是您可以使用这个中间件

首先,我使用这个请求:

Model.object.get(name='something', date=somedatavariable)
但我需要扩展我的查询并将其更改为:

Model.objects.get(name__icontains="something", date__range(start_date,end_date))

突然,我的数据库花费的时间是原始查询的5倍。这里发生了什么,我如何才能让它更快?

我怀疑是否有人能猜到,您的数据库到底是如何工作的:-)但是您可以使用这个中间件:


检查进行了什么样的sql查询以及它们花费了多少时间。

不区分大小写的通配符搜索(
name\uu icontains='something'
)肯定比区分大小写的精确匹配(
name='something'
)更昂贵。5倍的速度听起来并不是不合理的,它将根据以下任何一个或所有情况发生重大变化:

  • 数据库引擎(MySQL、PostgreSQL、SQLite等)
  • 数据库中的记录数
  • 必须搜索的每个名称字段中的文本量
  • DB是否可以为该列使用适当的索引
最后一个问题非常棘手。对数据库进行全文索引很难做到正确,很容易出错,甚至不是所有数据库引擎都支持

date
date\uu范围
的情况也一样:一个是快速、简单、易于索引的精确匹配,另一个是不精确匹配


底线是:如果你不需要不精确的匹配,那么就不要使用它们。它们是昂贵的数据库操作,需要花费更长的时间。

确切地知道查询需要多长时间是一件好事,不过老实说,我更喜欢在单元测试中进行这种分析,在单元测试中我可以隔离变量。不过,这些查询看起来相当简单,OP速度放缓的根源也非常清楚。也许我可以重新配置MySQL数据库。我不喜欢它的工作方式。我想很长时间了。但在TaskManager中,它显示MySQL只使用25MB。我可以为MsSQL扩展内存吗?这不是内存问题。MySQL的内存管理很好。您需要更多地了解数据库索引和排序是如何工作的。或者说“我不想理解,给我一个解决方案…”然后我推荐谷歌搜索: