Mysql 优化Django-ORM

Mysql 优化Django-ORM,mysql,django,optimization,raspberry-pi,django-queryset,Mysql,Django,Optimization,Raspberry Pi,Django Queryset,我正在运行我自己的智能家居项目,在raspberry Pi上使用django后端和MySql。我有数据库中的SensorsData表,其中有数千条记录和来自传感器的数据。在我的REST API中,我使用的视图如下所示: @api_view(['GET']) @permission_classes([IsAuthenticated]) def list_of_sensors_data(request, format=None): """ Get lis

我正在运行我自己的智能家居项目,在raspberry Pi上使用django后端和MySql。我有数据库中的SensorsData表,其中有数千条记录和来自传感器的数据。在我的REST API中,我使用的视图如下所示:

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def list_of_sensors_data(request, format=None):
    """
    Get list of all sensors data, only for authenticated users
    :param request: GET
    :return: list of all sensors data if ok http 200 response
    """
    sensors_data = SensorsData.objects.all()
    serializer = SensorsDataSerializer(sensors_data, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)
我已经用蝗虫模拟10个试图使用我的端点的用户运行了性能测试。一段时间后,Django使用此特定端点继续返回504超时。我的任务是,如何优化这个查询集?我需要加快速度

编辑传感器数据模型:

class SensorsData(models.Model):
    sensor = models.ForeignKey(Sensors, on_delete=models.CASCADE)
    delivery_time = models.DateTimeField(auto_now_add=True)
    sensor_data = models.CharField(max_length=20)

    class Meta:
        verbose_name = "Sensor data"
        verbose_name_plural = "Sensors data"

    def __str__(self):
        return f"{self.sensor.id}: {self.sensor.name}"
传感器数据序列化程序:

class SensorsDataSerializer(serializers.ModelSerializer):
    sensor = serializers.SlugRelatedField(read_only=False, many=False, slug_field='name', queryset=Sensors.objects.all())

    class Meta:
        model = SensorsData
        fields = ("sensor", "delivery_time", "sensor_data")
这将引入一个N+1问题,对于每个
SensorsData
对象,您将进行额外的查询以获取相关的
Sensor
对象。好消息是,您可以使用让Django在同一个查询中检索所有相关的
传感器
s:

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def list_of_sensors_data(request, format=None):
    sensors_data = SensorsData.objects.select_related('sensor')
    serializer = SensorsDataSerializer(sensors_data, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)
@api_视图(['GET']))
@权限\u类([IsAuthenticated])
def传感器数据列表(请求,格式=无):
传感器数据=传感器数据。对象。选择与传感器相关的('传感器')
序列化器=传感器数据序列化器(传感器数据,多个=真)

返回响应(serializer.data,status=status.HTTP\u 200\u OK)
仅适用于当前经过身份验证的用户?或者用户(?)您可以从请求中获取当前经过身份验证的用户。用户请共享
SensorDataSerializer
SensorData
模型。@Alvi15 ofc测试是为经过身份验证的用户运行的。@WillemVanOnsemdone@MichałZaręba:
sensors_data=SensorsData.objects。选择_related('sensor')