Django类常量与数据库查找性能

时间:2016-06-03 02:23:50

标签: python sql django database

鉴于我有一个像这样的Django模型:

Class Shape(models.Model):
    SHAPE_MAPPING = {
        'square': {'is_symmetrical': True},
        'rectangle': {'is_symmetrical': False}
    }
    is_symmetrical = models.BooleanField(default=False)
    # other fields go here

查询形状是否对称的更合适的方法是什么? 我在shell中运行了一个测试查找,结果如下:

ShapeType.objects.get(name='square').is_symmetrical = 0.0212440490723 seconds 
ShapeType.SHAPE_MAPPING['square']['is_symmetrical'] = 2.86102294922e-06 seconds

忽略它作为形状等的概念设置,并假设这些物理属性不会发生变化。我问: if(以及何时)适合在模型类级别创建非rel常量结构以便更快地查找。

1 个答案:

答案 0 :(得分:1)

嗯,你有时间表明如果可能的话,使用常数会更快。你获得常数的时间不会随着时间的推移而恶化,但是如果你在数据库中查找它会随着表的增长而变得越来越糟。索引在这里没有帮助,因为这是一个布尔字段,无法有效索引。

如果您决定使用缓存,性能仍然比使用常量慢。虽然缓存性能不会随着增长而恶化,但网络调用的开销确保它比常量查找慢。