Django 站点:如何使用 Databse 更快地加载站点页面

时间:2021-06-14 13:18:27

标签: django django-models django-templates

建筑类型的一般理论问题

我有网站页面,其中包含 Tabs 的集合。在某些数据表的每个 Tab 问题中。 实际上,所有这些数据表 - 都是 MySQL 数据库中某个 QuerySet 的不同 filter。 (此查询中的最大行数:约 5000-10000 行,包含 5-8 个字符 (45)/整数字段。)

怎么做才能更快、更正确:

1.我对 DBMS 服务器使用了一个 sql 请求:

```Python
    def Page(request):
    ....
    GeneralQuery = MyTable.objects().all()
        
        # After make all needed filter for `GeneralQuery` QuerySet in memory, without any reconnect to 
        # Django.Models (DBMS MySQL in fact)
        
    tab1_qry = GeneralQuery.filter(field1__in=[filter_list1])
    tab2_qry = GeneralQuery.filter(field2__in=[filter_list2])
    tab2_qry = GeneralQuery.filter(field3__in=[filter_list3])
        
    exit_tabs = {
        'tab1_data`: tab1_qry,
        'tab2_data`': tab2_qry,
        'tab3_data`': tab3_qry,
        }
    return(request, template_name="data_tabs.html", context=exit_tabs)

所以 - 所有需要的数据 - 在网络服务器内存中。模板 - 仅在一页上的 Tab1、Tab2、Tab3 之间切换并发出 tabX_data

之一

2.我为 tabX_data 放置了任何 TabX,例如从 request.GET 中获取 Tab_name(或其他一些方法 - 我想这不是问题):

   ```Python
        def Page(request):

        GeneralQuery = MyTable.objects().all()
            
            # After make all needed filter from `GeneralQuery` QuerySet in memory, 
    #but get own `render` function for each `Tab`. 

        if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
          return tab1(request, GeneralQuery)
    elif request.GET[`tab2`] == `yes`:
          return tab2(request, GeneralQuery)
    elif request.GET[`tab3`] == `yes`:
          return tab3(request, GeneralQuery)
       
        def tab1(request, GeneralQuery):
          exit_tab = {
            'TabX': 'tab1'   # For Activate `Tab1` on page
            'tab_data': GeneralQuery.filter(field1__in=[filter_list1])
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)

        def tab2(request, GeneralQuery):
          exit_tab = {
            'TabX': 'tab2'   # For Activate `Tab2` on page
            'tab_data': GeneralQuery.filter(field2__in=[filter_list2])
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)
```

3.与第 2 页类似,但针对每个问题自行查询数据库:

   ```Python
        def Page(request):


        if (not request.GET) or (request.GET[`tab1`] == `yes`): #By default `tab1`
          return tab1(request)
    elif request.GET[`tab2`] == `yes`:
          return tab2(request)
    elif request.GET[`tab3`] == `yes`:
          return tab3(request)
       
        def tab1(request, GeneralQuery):
          tab_data = MyTable.objects.filter(field1__in=[filter_list1])

          exit_tab = {
            'TabX': 'tab1'   # For Activate `Tab1` on page
            'tab_data': tab_data
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)

        def tab2(request, GeneralQuery):
          tab_data = MyTable.objects.filter(field2__in=[filter_list2])
          exit_tab = {
            'TabX': 'tab2'   # For Activate `Tab2` on page
            'tab_data': tab_data
        }
 
       return render(request, template_name="data_tabs.html", context=exit_tab)
```

0 个答案:

没有答案