2014-02-16 58 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使事情變得如此簡單,我懶惰,沒有太多研究。 –