Python Django数据库优化?这是慢的还是正常的?

Python Django数据库优化?这是慢的还是正常的?,python,mysql,django,amazon-web-services,rds,Python,Mysql,Django,Amazon Web Services,Rds,我有几个关于数据库性能的问题。我的应用程序中有以下Django模型及其相应的管理类。数据库是MySQL,托管在Amazon RDS上 通过for循环,在Notifications表中添加大约45000条记录花费了20多分钟。这个时间慢还是正常 此表的django管理界面太慢。在无dB负载下加载大约需要30秒。当数据库执行任何作业时,加载通常需要2分钟以上。这个表通常每一两周增加一百万条记录。是否有办法提高数据库和/或系统的性能,或者当前的加载时间是否正常 型号 class Notificatio

我有几个关于数据库性能的问题。我的应用程序中有以下Django模型及其相应的管理类。数据库是MySQL,托管在Amazon RDS上

  • 通过for循环,在Notifications表中添加大约45000条记录花费了20多分钟。这个时间慢还是正常
  • 此表的django管理界面太慢。在无dB负载下加载大约需要30秒。当数据库执行任何作业时,加载通常需要2分钟以上。这个表通常每一两周增加一百万条记录。是否有办法提高数据库和/或系统的性能,或者当前的加载时间是否正常
  • 型号

    class Notification(models.Model):
        id = models.AutoField(primary_key=True)
        token = models.ForeignKey(Token, blank=False, null=False)
        alert = models.ForeignKey(Alert, blank=False, null=False)
        created_at = models.DateTimeField(auto_now=True)
        is_sent = models.BooleanField(default=False)
        is_processed = models.BooleanField(default=False)
        error_sending = models.BooleanField(default=False)
        # ...
        def __unicode__(self):
            return u'%s' % (self.alert )
    
    管理

    class AppNotification(admin.ModelAdmin):
        fields = ['token','alert','is_sent','is_processed','error_sending']
    
        #
        list_display = ('token','alert','created_at','is_sent','is_processed','error_sending')
    
        #
        search_fields = ('app__app_name','token__token')
    
        #
        list_select_related = True
    
        #
        list_per_page = 25
    
    admin.site.register(Notification,AppNotification)
    

    关于你的第二个问题:

    此表的django管理界面太慢。它需要大约 在无dB负载的情况下加载30秒。通常需要2个以上的时间 数据库执行任何作业时要加载的分钟数

    这似乎是一个缓慢的问题?一个很好的起点是查看正在运行的查询(django debug工具栏),并使用db提供的工具对其进行调试并添加适当的索引


    在django 1.4中,添加了一种方法,它至少可以减少通过网络传输插入数据所花费的时间

    花了20多分钟的时间在数据库中添加了大约45000条记录 通知表,通过for循环。这个时间慢还是正常

    这在这种设置中并不罕见。Django ORM速度不快,如果速度很重要的话,它不是添加数千个条目的好方法。RDS的速度取决于实例类型,但通常低端的也不快

    另一种选择是使用低级SQL或using,但是您必须记住,这两种方法都不会调用对象
    .save()
    ,也不会发送
    pre\u save
    post\u save
    信号。在这些包含大量业务逻辑的情况下,这可能是一个问题

    此表的django管理界面太慢。它需要大约 在无dB负载的情况下加载30秒。通常需要2个以上的时间 数据库执行任何作业时要加载的分钟数。这张桌子 通常每一两周增加一百万条记录。有办法去吗 提高数据库和/或系统的性能,或者 当前加载时间正常吗


    你的模型管理员中有
    list\u select\u related=True
    ,这似乎是唯一能让它变慢的东西。它确实加入了
    令牌
    警报

    我最近遇到了完全相同的问题,不得不深入挖掘,找到解决办法,让我的Django管理员为记录超过100万条的表而忙碌。我的问题最终导致页面加载上的查询代价高昂,而且每当我使用
    ModelAdmin
    中的
    search\u字段时,搜索查询的结构也很糟糕

    经过大量的研究和思考,我提出了一些不错的解决方案,并将其记录在这里: