哪个进程将是更快的后端工作或sql查询?

时间:2019-03-14 11:09:06

标签: mysql django database performance

场景

我正在使用Django 2和MySQL开发搜索系统。搜索系统使用参数命中数据库并编译 4表连接查询。对于大量数据,这会使搜索的执行速度变慢。

查询:

itemViewCategory = Item.objects.raw("select *, company.slug as companySlug, company.name as companyName, field.id as fieldId, field.name as fieldName, category.name as categoryName from company inner join category on company.business_type = category.id inner join category_field on category_field.category_id = category.id inner join custom_field as field on category_field.field_id = field.id where category.id = (select id from category where slug= %s) and field.name LIKE %s order by company.name", [slug,product])

此外,我需要计算其他操作所需的数据计数。

我可以通过 2种不同的方式

  1. 首先是使用for循环来计数该数据。
  2. 或者执行另一个查询以计算该数据。

现在我的问题是哪个过程将更快?我做了一些研究,但没有得到满意的答复,我现在很困惑。有人可以帮我这个查询吗?

1 个答案:

答案 0 :(得分:1)

如果您只需要对查询结果进行计数,而又不需要结果集,则数据库将能够更好地优化计数。在这种情况下,如果您使用python进行计数,则数据库将不得不序列化结果集,而python将不得不反序列化结果集,这是很多不必要的流量和计算周期。

但是,如果您实际上还需要结果集,那么执行两个查询(一个来获取结果,一个要计数)很可能会比仅执行一个查询并对python进行计数要慢,尤其是在查询速度慢/复杂且数据库无法进行索引计数的情况下,因为数据库实际上可能必须对数据运行两次。此外,根据您的事务隔离级别,如果您处于允许幻像读取的事务隔离级别,则执行两个查询实际上可能会在两个查询中为您提供不同的计数,因为两个查询之间可能已添加/删除了行。

不过,如果您对此有所担心,那么最终应该对您的操作进行基准测试。