2014-02-16 43 views
0

所以我试图提供一些文件,并在下载链接的页面上显示有关它们的信息。信息存储在sqlite数据库中,我正在使用Flask和SQLalchemy。我的一个文件模型是这样的:SQL查询大量条目的性能?

class storedfile(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    path = db.Column(db.Text, unique = True) 
    name = db.Column(db.Text) 
    age = db.Column(db.DateTime) 
    download_count = db.Column(db.Integer) 

    def __init__(self, path, name, age, download_count): 
     self.path = path 
     self.name = name 
     self.age = age 
     self.download_count = download_count 



    def __repr__(self): 
     return '<storedfile % r>' % self.name 

当加载,我通过路径过滤检索有关该文件的信息页面(每个路径是唯一的,文件夹名称是随机产生的),像这样:

fileinfo = storedfile.query.filter_by(path = os.path.join(new_folder_path, filename)).first() 

如果索引中存在大量路径,则路径未排序,这是否会显着降低性能?有更好的/更快的方式来分类和查询它们吗?

+1

这不是一个瓶颈或SQLAlchemy的具体问题,顺便说一句。这是纯粹的数据库理论。 –

回答

1

不,过滤精确的字符串不会是一个问题。这就是数据库擅长的地方;为精确匹配构建有效索引。

具有唯一性约束的列上的确切字符串匹配是数据库可以构建和维护的最简单的索引之一,您正在做的正确。

+0

为了更加准确,它会“显着减慢性能”,只是不够重要 - 通过精确字符串匹配来搜索关系数据库通常是O(log N),而不是O(1),因此对于10000000行,我们可能会比使用10次的时间长几倍,但不会比几次长,这通常无法缓慢地成为您的瓶颈。 – abarnert

+0

谢谢。这是我第一次使用关系数据库(或任何数据库),SQLalchemy使事情变得如此简单,我懒惰,没有太多研究。 –