我有一个django应用程序,该应用程序不断接收客户端更新并从数据库中读取数据。我注意到保存对象后,我的应用程序读取数据库的速度要慢得多。该表有超过2M个对象。
我正在使用django,python和mysql。
我已经使用django调试工具栏来监视处理这些事件所花费的时间以及我所看到的:
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 0, 7777) [3.00ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 1, 7777) [4.01ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 2, 7777) [0.73ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 3, 7777) [1.75ms]
SELECT `manager_readmodel`.`id`,
`manager_readmodel`.`timestamp`,
`manager_readmodel`.`index`,
`manager_readmodel`.`value`
FROM `manager_readmodel`
WHERE `manager_readmodel`
ORDER BY `manager_readmodel`.`timestamp` DESC,
`manager_readmodel`.`index` ASC
LIMIT 4 [451.36ms]
这是我的代码:
value = 1 #example
for i in xrange(1, 5):
insert_list.append(models.ReadModel(
timestamp=local_time,
index=i,
value=value
))
models.ReadModel.objects.bulk_create(insert_list)
#
#
#
#
readings = readings.all().order_by('-timestamp', 'index')[:4]
reading_values = []
for i, r in enumerate(readings):
reading_values.append(r.value)
这是创建模型的方式:
class ReadModel(models.Model):
timestamp = models.DateTimeField(default=timezone.now)
index = models.IntegerField()
value = models.BigIntegerField()
这正常吗?有办法改善吗?对于这种用例来说,有时可能需要花费1500ms的时间才能读完。